Как определить, когда запрос в завершенном в Mootools?

StackOverflow https://stackoverflow.com/questions/3557110

Вопрос

Я новичок в Moooolools, и я создаю класс шаблона, это мой код -

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

});

То, что я хочу сделать, это так:

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

Проблема в том, когда я звоню в этот код:

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

Я не получаю свой нынешний объект шаблона, я получаю - «неопределенный».
Как я могу сделать эту цепочковую?

Это было полезно?

Решение

Вы делаете асинхронный вызов внутри get функция. Запрос может занять 100 мс, 1 с 10 и к тому времени get Функция отделки и возврата, запрос все равно будет в ожидании. Вместо этого вам нужно сделать, пройдите функцию обратного вызова в get И назовите это на успех.

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

Обратите внимание, что вы ничего не возвращаете от функции Get. Одним из примеров, чтобы вызвать это:

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

Другие советы

Ваша функция GET отсутствует возвращаемое значение. Если вы хотите функции для цепочки, вы должны вернуть себе объект:

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top