Frage

Reden über XBL spricht nicht genau über Javascript. So werde ich diese Frage erstellen, die auf diese verwandt ist, aber jetzt über XBL, wo ich nicht der Schöpfer der Wurzel JavaScript-Code bin, aber nur die Methoden und Event-Handler in den Bindungen.

-

In einigen Fällen kann das this Schlüsselwort auf das Objekt beziehen kann ich es nicht zu erwarten. (Aktuelles Beispiel: in einem Schlüsselereignis in meinem XBL)

Was ist der beste Ansatz, um diese Art von Fehlern zu vermeiden?

Im Moment benutze ich immer die getElementById (oder $.fn von jQuery), aber ich bin mir nicht sicher, ob es der beste Ansatz ist.

- update

Ein wenig mehr Details:

Innerhalb eines XBL Methode der einzige Weg, um Zugriff auf das Element, das war definiert in den Xul Datei (die GUI-Beschreibungsdatei) ohne „dieses“ verwendet (wie es sei nicht die „this“ ich gehe davon aus) ist mit getElementById, und dies macht den Code nicht wiederverwendbar, so dass ich nach Alternativen freu ..

War es hilfreich?

Lösung

Wie Sie an anderer Stelle gehört haben, ist das Problem, dass der this Parameter nicht unbedingt das Objekt, das Sie zuerst gedacht, vor allem, wenn Sie sprechen Event-Handler und dergleichen. Der beste Weg, fand ich ist eine kleine Funktion zu schreiben, die einen Gegenstand als this Variable binden und eine andere Funktion zurück, die die Bindung an rufen Sie die ursprüngliche Funktion verwendet.

Werfen Sie einen Blick auf diesen Code:

var bindFunction = function(self, f) {
  return function() {
    return f.apply(self);
  };
};

var foo = function() {
  alert(this.hello);
};

var bar = { 
  hello: "Hello there"
};

var boundFoo = bindFunction(bar, foo);
boundFoo();

Was ich habe, ist eine Funktion namens bindFunction, die ein Objekt nimmt (genannt self) und eine Funktion, und gibt eine weitere Funktion, die den übergebenen in Funktion der Anwendung des self Objekt als this Variable nennen.

Der Rest des Codes ist nur einiger Testcode: eine foo Funktion das wird Alarm this.hello, ein bar Objekt mit einem hello Mitglied, und wie Sie foo mit bar binden können.

Im Grunde habe ich eine Funktion genommen, die keine Parameter akzeptiert und eine andere Funktion erzeugt, die die erste gewährleisten ist immer mit der richtigen this Variable genannt. Ideal für Event-Handler.

(Sorry, aber ich weiß nichts über XBL, so dass ich hoffe, dass dies von Nutzen sein wird.)

Andere Tipps

Wenn es keine beste Antwort, ein guter Ansatz könnte für die Umsetzung zu verwenden JavaScript-Dateien anstelle von XBL sein. Mit Blick auf die Xulrunner Quellcode, sieht aus wie die meisten Code tut dies.

Aber ich mag noch XBL verwenden, wenn es eine Möglichkeit, zu arbeiten gut mit ihm ist ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top