Getting Coffeescript to create a local variable in a FOR loop
coffeescript
Solution
this is what the `do` keyword is for. It will run a function immediately and any local variables with the same name as one of the arguments will be passed into it, ensuring proper closure scope.
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)
Check out the compiled version here
`do` can also be used outside of loops for self executing functions.
#coffeescript
do ->
foo = 'bar'
// javascript
(function() {
var foo;
return foo = bar;
})();
Problem
How can I get `dealViewItem` into the scope of the FOR loop? Currently, dealViewItem is scoped outside of it, and all my event listeners are added to the last dealViewItem. ``` for deal in dealArray dealViewItem = dealViewFactory.DealDetail(deal) dealViewItem.addEventListener 'click', -> dealCart.push(deal.dealId) dealViewItem.setAddedToCart() btnTakeDeals.setEnabled = true dealHolder.add(dealViewItem) ```