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 ..

È stato utile?

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 ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top