Ich habe ein paar verschiedene Schaltflächen, die dieselbe Funktion aufrufen, und ich möchte, dass sie in eine switch-Anweisung eingeschlossen werden, anstatt eine Reihe von else if-Bedingungen zu verwenden. Jede Hilfe wäre toll !!!
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?
Es gibt zwei Formen von switch
in CoffeeScript:
switch expr
when expr1 then ...
when expr2 then ...
...
else ...
und:
switch
when expr1 then ...
when expr2 then ...
...
else ...
Das zweite Formular könnte Ihnen helfen:
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
Sie können else null
Weglassen, wenn undefined
ein akzeptabler Wert für view
ist. Sie können die Logik auch in eine (explizite) Funktion einbinden:
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
Wenn Sie Ihrer Logik einen Namen geben (d. H. Sie in eine Funktion einschließen), ist dies häufig hilfreich, um den Code zu verdeutlichen.
Zusätzlich zu den Details in der akzeptierten Antwort unterstützen switch
-Anweisungen in CoffeeScript auch ,
, um mehrere Übereinstimmungsergebnisse bereitzustellen:
switch someVar
when val3, val4 then ...
else ...
oder (falls Ihre Aussage mehrzeilig ist):
switch someVar
when val3, val4
...
else
...