2010-12-17 9 views
0

Ich habe 2 verschiedene JS-Dateien: A.js und B.js. A.js sieht ungefähr so ​​aus:Frage zu 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 ist dies:

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

Ich bin nicht in der Lage, die Funktion setStatus von B.js. anrufen Die Funktion wird überhaupt nicht ausgeführt. Es wird zwar kein Fehler ausgegeben. Was könnte das Problem sein?

Antwort

2

Es gibt eine Menge Dinge, die mit dem von Ihnen geposteten Code keinen Sinn ergeben. Wo instanziierst du ein Spinnobject? Ich werde versuchen zu helfen, basierend auf was ich denke, Sie versuchen zu tun.

Zunächst einmal registrieren Sie nie die Spinner-Komponente mit dem System. In a.js deklarieren Sie var spinner in der YUI.use-Funktion. Dies macht es unmöglich, von außerhalb dieser yui.use zuzugreifen. Sie müssen entweder yui.add anstatt yui.use verwenden oder Y.namespace ('myNS') setzen. Spinner = Spinner; als letzte Zeile von a.js. Dadurch wird Ihre Spinner-Komponente global als Y.myNS.Spinner verfügbar.

nächstes muss initializer eine Funktion sein:

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

und setStatus sollte nur ein Mitglied der Prototyp Eigenschaften sein Objekt übergeben

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

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

So, jetzt in b.js zu erweitern, Sie kann ein neuer Spinner Objekt initialisieren

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

hoffentlich hilft dies. Entschuldigung, wenn ich nicht wusste, was Sie tun wollten.