approccio migliore per evitare di javascript di “questo” errori di XBL
-
12-10-2019 - |
Domanda
parlando di XBL non è esattamente parlando di javascript. Così creerò questa domanda che è legato a questo , ma ora circa XBL, dove io non sono il creatore del codice javascript radice, ma solo dei metodi e dei gestori di eventi all'interno delle associazioni.
-
In alcuni casi, la parola chiave this
non può fare riferimento all'oggetto mi aspetto che. (Esempio recente: in un evento chiave, a mio XBL)
Qual è l'approccio migliore per evitare questo tipo di errore?
Per ora, sto usando sempre il getElementById
(o $.fn
da jQuery), ma non sono sicuro se è l'approccio migliore.
- update
Un po 'di più i dettagli:
Da un href="https://developer.mozilla.org/en/XUL_Tutorial:Adding_Methods_to_XBL-defined_Elements" rel="nofollow noreferrer"> metodo l'unico modo per accedere all'elemento che era definito nel Xul file (il file di descrizione della GUI) senza l'utilizzo di "questo" (come sia non essere il "questo" mi aspetto) è con getElementById, e questo rende il codice non riutilizzabile, quindi sono alla ricerca di alternative ..
Soluzione
Come avete sentito altrove, il problema è che il parametro this
non è necessariamente l'oggetto primo pensiero, soprattutto quando si parla di gestori di eventi e simili. Il modo migliore che ho trovato è quello di scrivere una piccola funzione che legherà qualche oggetto come variabile this
e tornare un'altra funzione che utilizza il legame di chiamare la funzione originale.
Date un'occhiata a questo codice:
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();
Quello che ho è una funzione chiamata bindFunction
che prende un oggetto (chiamato self
) e qualche funzione, e restituisce un'altra funzione che chiamerà il passato in funzione di applicare l'oggetto self
come variabile this
.
Il resto del codice è solo un po 'di codice di prova: una funzione che foo
avviso volontà this.hello
, un oggetto bar
con un membro hello
, e in che modo è possibile associare foo
con bar
.
In sostanza, ho preso una funzione che non accetta parametri e ha generato un'altra funzione che garantirà il primo è sempre chiamato con la variabile this
corretta. Ideale per i gestori di eventi.
(Ci dispiace, ma non so nulla di XBL, quindi spero che questo sarà di utilizzo.)
Altri suggerimenti
Se non c'è una risposta migliore, un approccio buono potrebbe essere file javascript usare al posto di XBL per l'attuazione. Guardando il codice sorgente Xulrunner, si presenta come la maggior parte del codice fa questo.
Ma ho ancora vorrebbe utilizzare XBL, se ci fosse un modo per lavorare bene con esso ..