استخدام أساليب الاستدعاء الخاصة لطلب AJAX في النموذج
-
05-07-2019 - |
سؤال
ولقد ريفاكتوريد رمز لاستخدام الأجسام السليمة العمل، والآن لا أستطيع الحصول على AJAX.Request نموذج للعمل بشكل صحيح. هو رمز أدناه، انها تعمل في سياق 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
أبدا. لقد حاولت رد curryfying لكنه فشل.
والسؤال هو: كيف يمكنني إدارة لجعل هذا العمل
المحلول
وإنشاء إغلاق ل"هذا":
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