PrototypeでAJAXリクエストに独自のコールバックメソッドを使用する
-
05-07-2019 - |
質問
適切なオブジェクトを使用するように作業コードをリファクタリングしましたが、PrototypeのAJAX.Requestを適切に機能させることができなくなりました。以下のコードは、YUIのDataTableのコンテキストで機能しています:
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
が未定義であるという例外がスローされていることがわかります。コールバックはオブジェクトコンテキストで呼び出されないため、 this
は割り当てられません。コールバックのカリー化を試みましたが、失敗しました。
問題は、どうすればこの作業を行うことができますか?
解決
" this"のクロージャーを作成します:
SearchTable.prototype.show = function () {
....
var self = this;
new Ajax.Request(this.dataProxy, {
method: 'get',
parameters: {
format: 'json',
param: 'columns'
},
onSuccess: function(transport) { self.setTableColumns(transport); }
});
他のヒント
これを試してください:
onSuccess: this.setTableColumns.bind(this)
所属していません StackOverflow