同じ関数を呼び出しているいくつかの異なるボタンがあり、else if条件の束を使用するのではなく、switchステートメントでラップしたいです。どんな助けも素晴らしいでしょう!
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には switch
の2つの形式があります。
switch expr
when expr1 then ...
when expr2 then ...
...
else ...
そして:
switch
when expr1 then ...
when expr2 then ...
...
else ...
2番目の形式は次の場合に役立ちます。
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
...