2015-04-16 13 views
5

voglio chiamare due funzioni quando myValue cambiamenti, e mentre questo funziona bene:Chiamata di più funzioni all'interno jQuery .on ("cambiamento" ... evento)

this.myValue.on("change", $.proxy(self.functionOne, self)); 
this.myValue.on("change", $.proxy(self.functionTwo, self)); 

né la funzione viene chiamata in questo caso:

this.myValue.on("change", function() { 
    $.proxy(self.functionOne, self); 
    $.proxy(self.functionTwo, self); 
}) 

non è un affare enorme per me, se non riesco a chiamare entrambe le funzioni all'interno di un evento di cambiamento come questo in questo momento, ma io sono abbastanza nuovo per jQuery e vorrebbe imparare perché.

risposta

6

è necessario chiamare le funzioni definite nel $.proxy():

this.myValue.on("change", function() { 
    $.proxy(self.functionOne, self)(); 
    $.proxy(self.functionTwo, self)(); 
}) 

Annotare la finale ().

+0

Wow, mi ci è voluto un po 'per individuare :) – Liam

+0

Mmh, perché non solo 'self.functionOne()'? ;) –

3

Utilizzare il nativo apply o call invece

this.myValue.on("change", function() { 
    self.functionOne.apply(this, arguments); 
    self.functionTwo.apply(this, arguments); 
}); 

$.proxy prende una funzione e restituisce uno nuovo che avrà sempre un particolare contesto, e che funziona quando si fa riferimento la funzione restituito, ma non il modo in cui si lo stiamo facendo nel callback in quanto la funzione restituita non viene mai chiamata.

Si potrebbe ovviamente usare $.proxy e basta chiamare la funzione restituita così

this.myValue.on("change", function() { 
    $.proxy(self.functionOne, self)(); 
    $.proxy(self.functionTwo, self)(); 
}); 

o semplicemente lasciare jQuery gestirlo, ottimizza gli eventi e utilizza una coda interna comunque

this.myValue.on("change", self.functionOne); 
this.myValue.on("change", self.functionTwo); 
3

Il $.proxy il metodo restituirà solo una funzione, ma non la chiamerà. È possibile utilizzare:

self.functionOne.call(self); 
self.functionTwo.call(self); 

La funzione di chiamata chiama la funzione e si passa al "contesto", ad esempio. ciò che viene usato come 'this' all'interno della funzione, proprio come in $ .proxy.

0

Perché non puoi chiamarlo così semplice?

this.myValue.on("change", function() { 
    functionOne(); 
    functionTwo(); 
}) 
+0

immagino 'this! = Self' –

+0

Cosa ti fa pensare che le sue funzioni siano disponibili nell'ambito corrente? –

+0

buon punto @FelixKling ma ,, non è il proxy verso se stesso, o lo scopo attuale? –