我有两个不同的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。该功能根本不执行。虽然没有抛出错误。这可能是什么问题?
答案 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
});
});
希望这会有所帮助。对不起,如果我没有弄清楚你想要做什么。