2010-11-23 47 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')]) 

因爲事件總是最後一個論點。