web-dev-qa-db-fra.com

Changer la déclaration de cas en écriture café

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?
54
user992731

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.

111
mu is too short

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
        ...
21
larsmoa