Frage

Ich habe Refactoring Code arbeiten richtigen Objekte zu verwenden, und jetzt kann ich nicht Prototype Ajax.Request bekommen richtig zu arbeiten. Der Code ist unten, es funktioniert in Zusammenhang mit 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 () {
        ....
 }

Mein Problem ist, dass dataTableCallback nie aufgerufen. Offenbar ist es eine Ausnahme, dass this zu werfen ist nicht definiert, was ich verstehen kann: Rückrufe werden nicht in Objektkontext genannt und ist somit this nie zugewiesen. Ich habe curryfying Rückrufe versucht, aber gescheitert.

Die Frage ist: Wie kann ich diese Arbeit machen zu verwalten

?
War es hilfreich?

Lösung

Erstellen Sie einen Verschluss für "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); }
  });

Andere Tipps

Versuchen Sie folgendes:

onSuccess: this.setTableColumns.bind(this)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top