0

A.js と B.js の 2 つの異なる 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

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

まず、スピナー コンポーネントをシステムに登録することは決してありません。a.js では、YUI.use 関数内で var spinner を宣言します。これにより、その 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 は、extend に渡されるプロトタイプ プロパティ オブジェクトのメンバーである必要があります。

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

うまくいけば、これが役立ちます。あなたが何をしようとしているのかわからなかったらごめんなさい。

于 2010-12-19T20:31:21.980 に答える