Как определить, когда запрос в завершенном в Mootools?
-
30-09-2019 - |
Вопрос
Я новичок в 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;
}