2010-11-23 8 views
1

ich verdeckte brauchen diesen Code von Mootools 1.2 zu 1,3bindWithEvent Mootools 1.3

var SomeClass = new Class({ 
initialize: function (els) { 
    for (var i = 0; i < els.length; i++) { 
    els[i].addEvent('click', 
    this.alert.bindWithEvent(this, [i, els[i].get('text')]) 
    ); 
    } 
}, 

alert: function (event, index, text) { 
    alert(
    index + ' -> ' + text + ' | ' + 
    'x:' + event.page.x + ', y:' + event.page.y 
); 
} 
}); 

Hier ist die Arbeitsversion (1,2) http://jsfiddle.net/9Pn99/
Hier ist meine Version für 1.3 http //jsfiddle.net/9Pn99/1/

EDIT: Ich habe herausgefunden, wie es geht, mit einem Verschluss. http://jsfiddle.net/9Pn99/4/

for (var i = 0; i < els.length; i++) { 
    (function (j) { 
     els[i].addEvent('click', 
      function (e) { 
       this.alert(e, j); 
      }.bind(this) 
     ); 
    }.pass([i], this))(); 
} 

Gibt es eine bessere Lösung?

EDIT2: Ich fand eine weitere einfache Möglichkeit:

Sieht aus wie ich allein rede.

+0

bei Ihrer letzten Bearbeitung: 'els [i] .addEvent' sollte einfach' el.addEvent' sein, sonst 100% auf das Geld - ich habe Ihre Änderung nicht gesehen, bevor ich loslegte, um meine Antwort zu machen :(Löschen in Kürze –

Antwort

0

basierend auf dem, was Sie auf dem Laufenden: http://jsfiddle.net/dimitar/9Pn99/5/

var SomeClass = new Class({ 
    initialize: function (els) { 
     els.each(function(el, i) { 
      el.addEvent("click", function(e) { 
       this.alert(e, i); 
      }.bind(this)); 
     }, this); 
    }, 

    alert: function (event, index) { 
     alert(
      index + ' | ' + 
      'x:' + event.page.x + ', y:' + event.page.y 
     ); 
    } 
}); 

new SomeClass($$('li')); 

jeweils Schleifen Sie geben einen natürlichen Laufzeitindex Sie (im Gegensatz darstellen kann als die für Schleifen, die eine einzelne Variable verweisen, die bis Ende bei einem eingestellten Wert).

Wenn Sie sich die Mootools-Tag-Liste ansehen, gibt es zur Zeit 3 ​​oder 4 Fragen auf der ersten Seite zum Ersetzen von bindWithEvent sowie 2 zum echo-Status von Variablen auf geloopten Elementen. Für Letzteres können Sie auch Schließungen und alle Arten erstellen.

haben Spaß :)

1

Die einfachste Lösung ist Argumente im Verfahren umgekehrt :) also wenn Sie Methode haben wie diese

function (e, a){}.bindWithEvent(this, [i, els[i].get('text')]) 

function (a, e){}.bind(this, [i, els[i].get('text')]) 

tun, weil Ereignis immer das letzte Argument.