在咖啡脚本中切换case语句

我有几个不同的button,调用相同的function,我想他们包装在一个开关语句,而不是使用一堆其他条件。 任何帮助将是伟大的!

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? 

CoffeeScript中有两种forms的switch

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

和:

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

第二种forms可能会帮助你:

 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 

如果undefined是可接受的view值,则可以省略else null值。 你也可以把这个逻辑封装在一个(显式的)函数中:

 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 

给你的逻辑一个名字(即包装在一个函数)通常是有用的澄清你的代码。

除了接受的答案中的细节之外,CoffeeScript中的switch语句还支持提供多个匹配结果:

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

或(如果您的报表有多行):

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