J'ai quelques boutons différents qui appellent la même fonction et j'aimerais les insérer dans une instruction switch au lieu d'utiliser un tas d'autres conditions si. Toute aide est la bienvenue!!!
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?
Il existe deux formes de switch
dans CoffeeScript:
switch expr
when expr1 then ...
when expr2 then ...
...
else ...
et:
switch
when expr1 then ...
when expr2 then ...
...
else ...
Le deuxième formulaire pourrait vous aider:
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
Vous pouvez laisser le else null
si undefined
est une valeur acceptable pour view
. Vous pouvez également envelopper la logique dans une fonction (explicite):
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
Donner un nom à votre logique (c'est-à-dire l'envelopper dans une fonction) est souvent utile pour clarifier votre code.
En plus des détails dans la réponse acceptée , les instructions switch
dans CoffeeScript prennent également en charge ,
pour fournir plusieurs résultats de correspondance:
switch someVar
when val3, val4 then ...
else ...
ou (si vos déclarations comportent plusieurs lignes):
switch someVar
when val3, val4
...
else
...