2015-04-16 3 views
5

ich zwei Funktionen aufrufen wollen, wenn myValue Änderungen, und während dies ganz gut funktioniert:Aufruf mehrerer Funktionen aus jQuery .on („change“ ... event)

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

weder Funktion aufgerufen wird in diesem Fall:

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

Es ist nicht eine große Sache für mich ist, wenn ich jetzt nicht beiden Funktionen in einem Change-Ereignisse wie dieses Recht nennen kann, aber ich bin ziemlich neu in jQuery und möchte lernen Warum.

Antwort

6

Sie müssen die Funktionen in der $.proxy() definiert nennen:

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

Hinweis die Hinter ().

+0

, nahm das mich eine Weile zu erkennen :) – Liam

+0

Mmh, warum nicht nur 'self.functionOne()'? ;) –

3

Verwenden Sie die nativen apply oder call statt

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

$.proxy nimmt eine Funktion und gibt eine neue, die einen bestimmten Kontext immer haben wird, und das funktioniert, wenn die zurück Funktion verwiesen wird, aber nicht so, wie Sie mache es im Callback, da die zurückgegebene Funktion nie aufgerufen wird.

Sie könnten natürlich $.proxy verwenden und rufen Sie die zurück Funktion als auch

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

oder lassen jQuery damit umgehen, es optimiert die Ereignisse und verwendet eine interne Warteschlange ohnehin

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

Die $.proxy Methode wird nur eine Funktion zurückgeben, aber nicht aufrufen. Sie können:

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

Der Aufruf Funktion ruft die Funktion, und Sie erhalten im ‚Kontext‘, dh zu übergeben. was wird als "das" innerhalb der Funktion verwendet, ähnlich wie in $ .proxy.

0

Warum können Sie es nicht einfach so nennen? Wow

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

ich denke 'this! = Self' –

+0

Was lässt Sie glauben, dass er Funktionen im aktuellen Umfang verfügbar sind? –

+0

guter Punkt @FelixKling aber, ist er nicht Proxy für sich selbst, oder aktuellen Umfang? –