Я отредактировал рабочий код для использования правильных объектов, и теперь я не могу заставить AJAX.Request Prototype работать правильно. Код ниже, он работает в контексте DataTable Юи:Использование собственных методов обратного вызова для запроса AJAX в Prototype
SearchTable.prototype.setTableColumns = function (transport) {
this.dataTableColumns = transport.responseText.evalJSON();
this.dataTableCallback();
};
SearchTable.prototype.setTableConfiguration = function (transport) {
this.dataTableConfiguration = transport.responseText.evalJSON();
this.dataTableCallback();
};
SearchTable.prototype.show = function() {
....
new Ajax.Request(this.dataProxy, {
method: 'get',
parameters: {
format: 'json',
param: 'columns'
},
onSuccess: this.setTableColumns
});
new Ajax.Request(this.dataProxy, {
method: 'get',
parameters: {
format: 'json',
param: 'configuration'
},
onSuccess: this.setTableConfiguration
});
}
};
SearchTable.prototype.dataTableCallback = function() {
....
}
Моя проблема заключается в том, что dataTableCallback
никогда не вызывается. По-видимому, это исключает исключение , которое я могу понять: обратные вызовы не вызываются в контексте объекта, и поэтому this
никогда не назначается. Я пробовал curryfying callbacks, но не смог.
Вопрос в следующем: как я могу это сделать?
Спасибо, присваивание 'this' чему-то другому было ключом. –
Тем не менее, сочетание как вашего, так и решения Cédric является лучшим. –
Тем не менее, я думаю, что вам не нужно назначать это чему-то еще в этом примере. Поскольку setTableColumn вызывается как метод * этого *, * это * устанавливается в его теле. Это то же самое, что использовать bind(), но немного меньше прототипа-иш :) – Alsciende