2010-11-23 49 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/

编辑: 我想出了如何做到这一点,封闭。 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')]) 

因为事件总是最后一个论点。