Changer la déclaration de cas en script café

J’ai quelques boutons différents qui appellent la même fonction et je voudrais les avoir enveloppés dans une instruction switch au lieu d’utiliser un tas d’autres conditions. 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 de côté la valeur 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.-à-d. En l’entourant d’une fonction) est souvent utile pour clarifier votre code.

Outre les détails de la réponse acceptée , les instructions de switch dans CoffeeScript prennent également en charge , pour fournir plusieurs résultats de correspondance:

 switch someVar when val3, val4 then ... else ... 

ou (si vos relevés comportent plusieurs lignes):

 switch someVar when val3, val4 ... else ...