bindWithEvent mootools 1.3 - PullRequest
       5

bindWithEvent mootools 1.3

1 голос
/ 23 ноября 2010

Мне нужно скрыть этот код от mootools 1.2 до 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/

РЕДАКТИРОВАТЬ: я разобрался, как это сделать, с закрытием.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: я нашел другой простой способ:

els.each(function (el, i) {
    els[i].addEvent('click',
        function (e) {
            this.alert(e, i);
        }.bind(this)
    );
}, this);

Похоже, я говорю один.

Ответы [ 3 ]

1 голос
/ 27 апреля 2011

Самое простое решение - отменить аргументы в методе :), так что если у вас есть такой метод

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

до

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

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

0 голосов
/ 24 ноября 2010

в зависимости от того, что вы разместили: 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 о повторении «затем» состояния переменных для зацикленных элементов. для последнего вы также можете создавать замыкания и все виды.

веселись :) 1009 *

0 голосов
/ 23 ноября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...