2010-12-17 7 views
0

私は2種類のJSファイルを持っています:A.jsとB.js.私はB.js.から関数のsetStatusを呼び出すことができないんだけどquestion on yui3 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 
}); 

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はこれです:A.jsは次のようになりますこの関数はまったく実行されません。エラーはスローされません。これには何が問題なのでしょうか?

答えて

2

あなたが投稿したコードに意味を持たないものがたくさんあります。あなたはどこでスピナーオブジェクトをインスタンス化していますか?私はあなたがやろうとしていることに基づいて支援しようとします。

まず、スピナーコンポーネントをシステムに登録することは決してありません。 a.jsでは、YUI.use関数の中でvarスピナーを宣言します。そうすれば、yui.useの外部からアクセスすることは不可能になります。 yui.useの代わりにyui.addを使用するか、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 
    }); 
}); 

うまくいけば、これが役に立ちます。もしあなたが何をしようとしていたのか、私はGrokをやめてしまいました。