2014-04-13 15 views
45

Tôi có một vài nút khác nhau đang gọi cùng chức năng và tôi muốn chúng được bao bọc trong câu lệnh chuyển đổi thay vì sử dụng một nhóm khác nếu điều kiện. Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời!!!Lệnh chuyển trường hợp trong tập lệnh cà phê

events: 
"click .red, .blue, #black, #yellow" : "openOverlay" 

openOverlay: (e) -> 
    e.preventDefault() 
    e.stopPropagation() 

target = $(e.currentTarget) 

# the view should be opened 
view = 
    if target.hasClass 'red' then new App.RedView 
    else if target.hasClass 'blue' then new App.BlueView 
    else if target.is '#black' then new App.BlackView 
    else 
    null 

# Open the view 
App.router.overlays.add view: view if view? 
+0

Nó không thích hợp cho một tuyên bố chuyển đổi anyway (hasClass vs là). – user2864740

Trả lời

97

Có hai hình thức switch trong CoffeeScript:

switch expr 
    when expr1 then ... 
    when expr2 then ... 
    ... 
    else ... 

và:

switch 
    when expr1 then ... 
    when expr2 then ... 
    ... 
    else ... 

Dạng thứ hai có thể giúp bạn:

view = switch 
    when target.hasClass 'red' then new App.RedView 
    when target.hasClass 'blue' then new App.BlueView 
    when target.is '#black' then new App.BlackView 
    else null 

Bạn có thể bỏ qua số else null nếu undefined là giá trị chấp nhận được cho view. Bạn cũng có thể bọc logic trong một hàm (tường minh):

viewFor = (target) -> 
    # There are lots of ways to do this... 
    return new App.RedView if(target.hasClass 'red') 
    return new App.BlueView if(target.hasClass 'blue') 
    return new App.BlackView if(target.is '#black') 
    null 

view = viewFor target 

Đặt tên logic của bạn (tức là gói trong hàm) thường hữu ích để làm rõ mã của bạn.

+8

Hãy coi chừng rằng 'then' phải ** chỉ ** được sử dụng trong gán một dòng. Không đặt một 'sau đó' nếu bạn viết mã của bạn dưới đây hoặc nó sẽ thất bại trong quá trình biên dịch. – Vadorequest

12

Ngoài các chi tiết trong the accepted answer, switch báo cáo trong CoffeeScript cũng hỗ trợ , để cung cấp nhiều kết quả trận đấu:

switch someVar 
    when val3, val4 then ... 
    else ... 

hoặc (nếu báo cáo của bạn có nhiều dòng):

switch someVar 
    when val3, val4 
     ... 
    else 
     ... 
+0

Tôi không nghĩ rằng 'là' là đúng ở đây - nó sẽ tạo ra' case (val1 | | val2): 'statement - ie. chạy một phép toán boolean trên 'val1' và' val2'- đó không phải là điều tôi mong đợi ở đây. Các ',' hiện các trick mặc dù. – Voy

+0

@Voy: bạn đúng - 'hoặc' không tạo ra kết quả mong muốn. Đã cập nhật câu trả lời – larsmoa

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