2010-12-17 59 views
0

我有兩個不同的JS文件:A.js和B.js. A.js看起來是這樣的:關於yui3的問題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該功能根本不被執行。雖然沒有錯誤拋出。這可能是什麼問題?

回答

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應該僅僅是原型性質傳遞的對象的成員所以現在b.js延長

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

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

,你可以初始化一個新的微調對象

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

希望這會有所幫助。對不起,如果我沒有辜負你想做的事情。