2010-11-23 1 views
1

мне нужно тайному этот код от MooTools 1,2 до 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 
); 
} 
}); 

Вот рабочая версия (1.2) http://jsfiddle.net/9Pn99/
Вот моя версия для 1,3 HTTP //jsfiddle.net/9Pn99/1/

EDIT: Я понял, как это сделать, с закрытием. 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))(); 
} 

Есть ли лучшее решение?

EDIT2: Я нашел еще один простой способ:

Выглядит, как я говорю в одиночку.

+0

на вашем последнем редактировании: `els [i] .addEvent` должен быть просто` el.addEvent`, иначе 100% на деньги - я не видел ваше редактирование, прежде чем я намеревался выполнить свой ответ :(удаление в скором времени. – 2010-11-23 21:11:57

ответ

0

основано на том, что вы писали: 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')); 

каждый петли дают вам естественный индекс времени выполнения можно отобразить (в отличие от для петель, которые ссылаются на одну переменную, которая заканчивается вверх при заданном значении).

Если вы посмотрите на список тегов mootools, на первой странице есть 3 или 4 вопроса о замене bindWithEvent, а также 2 на эхо-состояние «then» переменных на элементах с петлями. для последнего вы также можете создавать закрытие и всевозможные.

весело :)

1

Самое простое решение заключается в обратном аргументы в методе :) так что если у вас есть метод, как этот

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

сделать

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

, потому что событие всегда последний аргумент.