wake-up-neo.com

Case-Anweisung im Kaffeeskript wechseln

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

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.

111
mu is too short

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