2012-04-11 8 views
0

Ist es möglich, das Ziel eines Ereignisses zu senden, das mit Binds an eine mootools-Klasse gebunden ist?Mootools-Klasse bindet mit Element als Parameter

dh:

checkbox.addEvent('change', this.checkBoxChangeAgain(this));

Wo this == checkbox

ps. Dies funktioniert nicht:

checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));

Antwort

2

der Grund, warum dies nicht der Fall funktioniert, dass durch method(this) tun Sie es tatsächlich sofort aufrufen. method.bind(checkbox) wird die Funktion dekorieren und den Gültigkeitsbereich des Kontrollkästchens ändern, wenn es später aufgerufen wird.

warum nicht Proxy es?

var self = this; 
checkbox.addEvent('change', function(e) { 
    self.checkBoxChangeAgain(this); 
}); 

new Class({ 
    checkBoxChangeAgain: function(checkbox) { 
     this; // instance 
     checkbox; // == org checkbox 
    } 
}); 

Standardmäßig ist das erste Argument für einen Event-Handler das Event und der Scope das Trigger-Element.

daher:

checkbox.addEvent('change', this.checkBoxChangeAgain); 

wird das bedeuten:

new Class({ 
    checkBoxChangeAgain: function(event) { 
     this === event.target; 
    } 
}); 

was bedeutet, können Sie auch:

checkbox.addEvent('change', this.checkBoxChangeAgain.bind(this)); 

und das wird funktionieren wie:

new Class({ 
    checkBoxChangeAgain: function(event) { 
     this != event.target; // true 
     event.target === checkbox; // true 
     this; // the class instance 
    } 
}); 

Ich hoffe, das gibt Ihnen Ideen. Suchen Sie auch hier auf SO nach bindWithEvent - insbesondere Ersatz für Bindung mit Ereignis.

+0

Dank zu benutzen, ich um ihn schließlich bekam Bypass verwenden. Deine Antwort hat mich jedoch in die richtige Richtung gelenkt. – Ashley

0

Ähnlich wie Dimitar Antwort funktioniert, aber Class.Binds verwendet wird, ist der einfachste Weg, .pass()http://mootools.net/docs/core/Types/Function#Function:pass

this.checkBoxChangeAgain.pass(checkbox)

+0

Vertrauen auf 'Class.binds' ist in der Regel verpönt, da es nicht für gute Lesbarkeit, insbesondere in einer langen Klasse, sowie für Leistung sorgt. Die billigste Lösung besteht darin, einen Verweis darauf in einer Variablen zu übergeben. Alle Methoden sind bereits einmal verpackt ... –