استخدام أساليب الاستدعاء الخاصة لطلب AJAX في النموذج

StackOverflow https://stackoverflow.com/questions/1001382

سؤال

ولقد ريفاكتوريد رمز لاستخدام الأجسام السليمة العمل، والآن لا أستطيع الحصول على 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top