0

我有 2 个不同的 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。该功能根本不执行。虽然没有抛出错误。这可能是什么问题?

4

1 回答 1

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 应该只是传递给扩展的原型属性对象的成员

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

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

所以现在在 b.js 中,你可以初始化一个新的 spinner 对象

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
     });
});

希望这会有所帮助。对不起,如果我没有理解你想要做什么。

于 2010-12-19T20:31:21.980 回答