如何将dealViewItem
放入FOR循环的作用域?目前,dealViewItem的作用域在它之外,我的所有事件侦听器都被添加到最后一个dealViewItem中。
for deal in dealArray
dealViewItem = dealViewFactory.DealDetail(deal)
dealViewItem.addEventListener 'click', ->
dealCart.push(deal.dealId)
dealViewItem.setAddedToCart()
btnTakeDeals.setEnabled = true
dealHolder.add(dealViewItem)
发布于 2012-07-25 07:06:23
这就是do
关键字的用途。它将立即运行一个函数,任何与其中一个参数同名的局部变量都将被传递给它,以确保适当的闭包作用域。
for deal in dealArray
do (deal) ->
dealViewItem = dealViewFactory.DealDetail(deal)
dealViewItem.addEventListener 'click', ->
dealCart.push(deal.dealId)
dealViewItem.setAddedToCart()
btnTakeDeals.setEnabled = true
dealHolder.add(dealViewItem)
对于自动执行的函数,do
也可以在循环之外使用。
#coffeescript
do ->
foo = 'bar'
// javascript
(function() {
var foo;
return foo = bar;
})();
https://stackoverflow.com/questions/11640529
复制相似问题