связывание this
в onComplete
запроса - это сам экземпляр запроса, а не ваша исходная область.
Вы можете использовать 3 модели.
1. сохранение ссылки
getObj: function (callThis) {
var self = this;
new Request.JSON({
method: 'get',
url: callThis,
onRequest: function () {
console.log('Loading: ' + callThis);
},
onComplete: function(thisObj){
// call it on the self reference
self.processObj(thisObj);
}
}).send();
},
2. привязка анонимной функции
Вы можете использовать декоратор function.bind для изменения области внутри обратного вызова:
getObj: function (callThis) {
new Request.JSON({
method: 'get',
url: callThis,
onRequest: function () {
console.log('Loading: ' + callThis);
},
onComplete: function(thisObj){
//console.log(thisObj);
this.processObj(thisObj);
}.bind(this) // change scope, inner this becomes the outer this as well.
}).send();
},
3. перейти к методу класса и связать напрямую
это пропускает создание функции anon.
getObj: function (callThis) {
new Request.JSON({
method: 'get',
url: callThis,
onRequest: function () {
console.log('Loading: ' + callThis);
},
onComplete: this.processObj.bind(this)
}).send();
},
с точки зрения предпочтения: я бы выбрал # 1, так как он имеет наименьшую нагрузочную способность, это предпочтительный способ mootools [tm]. тогда, вероятно, № 3 за лучшую организацию кода.
есть 4-й способ в сочетании с мутатором класса binds
из mootools-more, но давайте не будем этого делать:)