咖啡脚本中的 switch case 语句
Posted
技术标签:
【中文标题】咖啡脚本中的 switch case 语句【英文标题】:Switch case statement in coffee script 【发布时间】:2014-05-27 14:18:39 【问题描述】:我有几个不同的按钮调用相同的函数,我希望将它们包装在 switch 语句中,而不是使用一堆 else if 条件。任何帮助都会很棒!!!
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?
【问题讨论】:
无论如何都不适合switch语句(hasClass vs is)。 【参考方案1】:CoffeeScript 中有两种形式的switch
:
switch expr
when expr1 then ...
when expr2 then ...
...
else ...
和:
switch
when expr1 then ...
when expr2 then ...
...
else ...
第二种形式可能对您有所帮助:
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
给你的逻辑一个名字(即将它包装在一个函数中)通常有助于澄清你的代码。
【讨论】:
请注意,then
必须仅用于单行赋值。如果您在下面编写代码,请不要输入then
,否则它将在编译过程中失败。【参考方案2】:
除了the accepted answer中的细节,CoffeeScript中的switch
语句还支持,
提供多个匹配结果:
switch someVar
when val3, val4 then ...
else ...
或(如果您的语句有多行):
switch someVar
when val3, val4
...
else
...
【讨论】:
我不认为or
就在这里——它会创建case (val1 || val2):
声明——即。在val1
和val2
上运行布尔运算——这不是我所期望的。 ,
可以解决问题。
@Voy:你是对的 - or
不会产生预期的结果。答案已更新以上是关于咖啡脚本中的 switch case 语句的主要内容,如果未能解决你的问题,请参考以下文章