Подтвердить что ты не робот

Получение Coffeescript для создания локальной переменной в цикле FOR

Как я могу получить 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)
4b9b3361

Ответ 1

это ключевое слово 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;
})();