2012-07-24 39 views
18

Làm thế nào tôi có thể nhận được dealViewItem vào phạm vi của vòng lặp FOR? Hiện tại, dealViewItem được đặt bên ngoài nó, và tất cả các trình nghe sự kiện của tôi được thêm vào dealViewItem cuối cùng.Bắt Coffeescript để tạo ra một biến địa phương trong một vòng lặp FOR

for deal in dealArray 
     dealViewItem = dealViewFactory.DealDetail(deal) 
     dealViewItem.addEventListener 'click', -> 
      dealCart.push(deal.dealId) 
      dealViewItem.setAddedToCart() 
      btnTakeDeals.setEnabled = true 
     dealHolder.add(dealViewItem) 
+0

đọc http://dailyjs.com/2012/07/23/js101-scope/ mô tả phạm vi javascript, coffeescript kế thừa, sau đó bạn có thể xem điều gì làm và tại sao nó ở đó như được hiển thị trong Alexs trả lời –

+1

err, chỉ để được rõ ràng, javascript không có phạm vi khối, chỉ toàn cầu và chức năng phạm vi –

+0

liên kết dailyjs bị hỏng. Một số liên kết khác - http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html và http://zef.me/blog/2843/javascript-the-scope-pitfall –

Trả lời

32

đây là từ khóa do. Nó sẽ chạy một hàm ngay lập tức và bất kỳ biến cục bộ nào có cùng tên với một trong các đối số sẽ được truyền vào nó, đảm bảo phạm vi đóng phù hợp.

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) 

Kiểm tra các compiled version here


do cũng có thể được sử dụng bên ngoài vòng cho các chức năng tự thực hiện.

#coffeescript 
do -> 
    foo = 'bar' 

// javascript 
(function() { 
    var foo; 
    return foo = bar; 
})(); 
+3

Đã lưu tôi giờ. – woodardj

+0

Ditto. Ngoài ra, công việc tuyệt vời @woodardj. –

Các vấn đề liên quan