Frage

Ich bin neu in moootools und ich eine Template-Klasse erschaffe, Dies ist mein Code -

var Template = new Class({
  Singleton : true,
  template : '',

  /* gets the component type template */
  get : function(componentType){
    var tplUrl = Core.getUrl('backend') + 'response/' + componentType + '/get_template.php',
        that = this,
        request = new Request({url: tplUrl, method : 'get',onSuccess : function(responseText){
          that.template = responseText; 
          return that;
        }}).send(); 
  }

});

Was ich tun möchte, ist dies:

var tpl = new Template();
tpl.get('component').setTemplateData({name:'yosy'});

Das Problem ist, wenn ich diesen Code nenne:

var tpl = new Template();
console.log( tpl.get('component') );

Ich mein aktuelles Template-Objekt nicht bekommen, erhalte ich ist ‚undefined‘.
Wie kann ich diese verkettbar machen?

War es hilfreich?

Lösung

Sie machen einen asynchronen Aufruf innerhalb der get Funktion. Der Antrag kann 100ms, 1s oder 10s nehmen und durch die Zeit, die get Funktion beendet und kehrt, werden nach wie vor die Anforderung anhängig werden. Stattdessen, was Sie tun müssen, ist, eine Rückruffunktion get und Anruf passieren, dass auf Erfolg.

get: function(componentType, successCallback) {
    var request = new Request({
        ..,
        onSuccess: successCallback
    }).send();
}

Beachten Sie, dass Sie nichts Rückkehr aus der get-Funktion sind. Ein Beispiel Weg, dies zu berufen wäre:

tpl.get('component', function(responseText) { alert(responseText); });

Andere Tipps

Ihre get-Funktion fehlt ein Rückgabewert. Wenn Sie Funktionen zu verketten wollen, sollten Sie das Objekt zurückgeben selbst:

get : function(componentType){
var tplUrl = Core.getUrl('backend') + 'response/' + componentType + '/get_template.php',
    that = this,
    request = new Request({url: tplUrl, method : 'get',onSuccess : function(responseText){
      that.template = responseText; 
      return that;
    }}).send(); 

    return this;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top