关于yui3 JS的问题

时间:2010-12-17 03:21:13

标签: javascript yui yui3

我有两个不同的JS文件:A.js和B.js. A.js看起来像这样:

YUI.use('a few modules',function(Y) {
var Spinner=function(config) {
//invoke a constructor
}
Spinner.NAME='spinnerobject';
Spinner.ATTRS={
status:{
value:false
,readonly:true
,broadcast:2
}
};
Y.extend(Spinner,Y.Base, {
initializer: 
//many initializers here
, this.setstatus: function() {
//sets the status variable appropriately
}
});
});

B.js就是这样:

YUI.use('a few modules',function(Y) {
var button_yui2 = Y.YUI2.widget.Button( { initializing parameters for button}
);
button_yui2.on('change',function(e){
spinnerobject.setstatus(); // call made to a function in A.js
});

我无法从B.js调用函数setstatus。该功能根本不执行。虽然没有抛出错误。这可能是什么问题?

1 个答案:

答案 0 :(得分:2)

有很多东西对你发布的代码没有意义。你在哪里实例化一个spinnerobject?我将根据我的想法尝试提供帮助。

首先,您永远不会在系统中注册微调器组件。在a.js中,您在YUI.use函数中声明了var spinner。这使得无法从外部访问yui.use。你需要使用yui.add而不是yui.use或者使用Y.namespace('myNS').Spinner = Spinner;作为a.js的最后一行。这将使您的微调器组件全局可用为Y.myNS.Spinner。

接下来,初始化程序需要是一个函数:

Y.extend(Spinner, Y.Base, {
    initializer: function(cfg) {
        // do your init stuff here
    }
});

和setstatus应该只是传递给extend

的prototype属性对象的成员
Y.extend(Spinner, Y.Base, {
    initializer: function(cfg) {
        // do your init stuff here
    },

    setstatus: function() {
        // set status
    }
});

现在在b.js中,您可以初始化一个新的微调器对象

YUI.use('a few modules',function(Y) {
    var button_yui2 = new Y.YUI2.widget.Button({initializing parameters for button}),
        spinnerobject = new Y.myNS.Spinner({/*config object*/});

    button_yui2.on('change',function(e){
        spinnerobject.setstatus(); // call made to a function in A.js
     });
});
希望这会有所帮助。对不起,如果我没有弄清楚你想要做什么。