2010-12-16 12 views
0
// begin signals 
this.loginSignal 

this.init = function(){ 
    // init signals 
    this.loginSignal = new t.store.helpers.Signal; 

    // map events 
    $('[value]="login"', this.node).click(this.login) 
} 

this.login = function(){ 
    // this will dispatch an event that will be catched by the controller 
    // but this is not refering to this class 
    // and the next line fails :s 
    this.loginSignal.dispatch(); 
} 

es jetzt funktioniert iWie bekomme ich das von einem Objekt in einem Handler für ein Klickereignis in jquery?

var $this = this; 

diese Zeile und $this statt this verwenden müssen hinzufügen:

noch klarer Weg, um S? danke

+1

auf einem anderen Hinweis, '[Wert] =" Login "' sollte wahrscheinlich '[Wert =" Login "]' sein –

Antwort

1

Wenn der Click-Handler aufgerufen wird, wird das Schlüsselwort this dem Element zugeordnet, das das Ereignis ausgelöst hat. Um zum ursprünglichen Objekt zu gelangen, möchten Sie den Funktionscode in eine Schließung einfügen und einen Verweis auf das Objekt außerhalb des Abschlusses erstellen, wo Sie immer noch den korrekten Verweis auf this haben.

// map events 
    var thisObject = this; 
    $('[value]="login"', this.node).click(function() { 
    thisObject.loginSignal.dispatch(); 
    }); 
1

Technique 1: Verwenden eine Closure

var me = this; 
$(...).click(function(){ me.login(); }); 

Technique 2: das Element erhalten, die das Ereignis

this.login = function(evt){ 
    var el = evt.currentTarget || evt.target || evt.srcElement; 
    // Do something with the element here. 
}; 
1

jQuery hat eine Methode behandelt called jQuery.proxy(), die verwendet wird, eine Funktion mit dem Wert this zurückgeben, was Sie wollen.

$('[value="login"]', this.node).click($.proxy(login, this)); 
Verwandte Themen