Question

Parler de XBL ne parle pas exactement à propos de javascript. Je vais créer cette question qui est lié à celui-ci , mais maintenant environ XBL, où je ne suis pas le créateur du code javascript racine, mais juste des méthodes et des gestionnaires d'événements à l'intérieur des fixations.

-

Dans certains cas, le mot-clé this ne peut pas se référer à l'objet que je pense à. (Exemple récent: dans un événement clé, dans mon XBL)

Quelle est la meilleure approche pour éviter ce genre d'erreur?

Pour l'instant, j'utilise toujours le getElementById (ou $.fn de jQuery), mais je ne suis pas sûr que ce soit la meilleure approche.

- Mise à jour

Un peu plus de détails:

Dans une méthode XBL la seule façon d'accéder à l'élément qui a été défini dans le fichier de Xul (le fichier de description de l'interface graphique) sans utiliser « ce » (comme il peut ne pas être le « ce » je pense) est avec getElementById, ce qui rend le code non réutilisable, donc je suis à la recherche d'alternatives ..

Était-ce utile?

La solution

Comme vous l'avez entendu ailleurs, le problème est que le paramètre this est pas nécessairement l'objet d'abord pensé, surtout quand vous parlez de gestionnaires d'événements et autres. La meilleure façon que j'ai trouvé est d'écrire une petite fonction qui lie un objet comme la variable this et retourner une autre fonction qui utilise la liaison pour appeler la fonction originale.

Jetez un oeil à ce 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();

Ce que j'est une fonction appelée bindFunction qui prend un objet (appelé self) et une fonction, et retourne une autre fonction qui appellera le passé en fonction d'appliquer l'objet self comme la variable this.

Le reste du code est juste un code de test: une fonction foo qui alerte this.hello, un objet bar avec un membre de hello, et comment vous pouvez lier foo avec bar.

En substance, j'ai pris une fonction qui accepte aucun paramètre et a généré une autre fonction qui assurera la première est toujours appelé à la variable this correcte. Idéal pour les gestionnaires d'événements.

(Désolé, mais je ne sais rien de XBL, donc j'espère que cela sera utile.)

Autres conseils

S'il n'y a pas une meilleure réponse, une bonne approche pourrait être l'utilisation des fichiers javascript au lieu de XBL pour la mise en œuvre. Vous cherchez le code source Xulrunner, ressemble la plupart du code fait cela.

Mais je voudrais encore utiliser XBL, s'il y avait une façon de travailler très bien avec elle ..

scroll top