noname: EXT-JS & Prototype. this.variable has no properties

Hi,

Ich habe folgendes Problem: Ich habe mit Prototype ne Klasse für EXTJS gemacht und bekomme aber einen fehler in line 171, den ich aber nich verstehe, weil ich die variable oben zuvor initialisiert habe. Der link zum paste:
http://phpfi.com/335441

line 171. mit varNewsEdit.listingEditorGrid.stopEditing (); geht das Script, gibt aber Fehler bei this.dataStore.getModifiedRecords (); aus. Also mit varNewsEdit. funktioniert das Script, aber mit this. nicht.

Danke schonmal im Voraus

  1. Hallo,

    Ich habe mir deinen Code nicht näher angeschaut, aber offenbar handelt es sich um eine häufige Frage. Du verwendest eine Objektmethode als Event-Handler. Dadurch wird sie aus dem Kontext gerissen, denn »this« zeigt in Handlerfunktionen auf das Zielelement des Events, nicht auf irgendein Objekt, bei dem das Funktionsobjekt mal gespeichert war.

    Näheres zu dieser Problemstellung findest du hier:
    Methoden eigener Objekte in anderen Kontexten ausführen

    Ich weiß nicht, ob es bei ExtJS so etwas wie bindAsEventListener gibt, aber eine schnelle Recherche führt zu Scope of the handler function. Man kann also der on-Funktion das Objekt, auf das this im Event-Handler zeigen soll, als Parameter übergeben nach dem Schema:

    element.on('click', this.handlerfunktion, this);

    Allerdings rufst du offenbar gar nicht selbst on auf, sondern übergibst irgendwo einer Ext-eigenen Funktion ein Object mit der Eigenschaft handler: saveChanges. Ob du da einen Kontext angeben kannst, müsstest du in der entsprechenden Dokumentation nachsehen.

    Alternative Möglichkeiten wie Closures in der Konstruktorfunktion scheiden eher aus, weil du die Methoden über den prototype hinzufügst.

    Mathias

    1. Richtig danke schön, klappt nun wunderbar...
      Habe:
      .bindAsEventListener(this)
      hinter jede function gestellt und nun gehts einwandfrei :)
      Dann weiss der thin pointer auch wohin er pointen soll...