Hallo Joachim,
Vermutlich weil "this" Dich innerhalb einer Prototype-Methode in den Scope des Prorotype-Objekts versetzt und sich nicht mehr auf Dein eigenes Objekt bezieht. bindAsEventListener rufst Du so ja auch im Prototype-Kontext auf...
function foo(buttons)
{
this.buttons = new Object();
this.buttons.Zoomin = buttons[0];
$(this.buttons.Zoomin).style.cursor = 'pointer'; // Style wird gesetzt
Event.observe($(this.buttons.Zoomin), 'click', this.btnZoomin_Click.bindAsEventListener(this)); // Event wird nicht behandelt :(
//Event.observe($('btnZoomin'), 'click', this.btnZoomin_Click.bindAsEventListener(this)); // Event wird behandelt
this.btnZoomin_Click = function(event) { /* ... */ };
}
var buttons = new Array('btnZoomin', 'btnZoomout');
foo(buttons);
Geht aber ebenfalls. Somit denke ich nicht, dass es am this liegt. Müsste außerdem nicht ein Fehlermeldung kommen, dass er dann Objekte buttons und Zoomin nicht kennt?
Ich habe auch mal bei script.aculo.us nach geschaut (in control.js):
Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
Dies ist m.E. das selbe wie bei mir und hier funktioniert es ja auch.
Ich mein mittlerweile habe ich wie man oben sieht eine Lösung gefunden, die zwar nicht sehr schön ist, aber ich würde halt noch gerne wissen, warum es auf die erste angedachte Weise nicht funktioniert.
Bis denne