如何将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)
答案 0 :(得分:34)
这是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;
})();