Подтвердить что ты не робот

Выписка для случая кофе в кофе script

У меня есть несколько разных кнопок, которые вызывают одну и ту же функцию, и я хотел бы, чтобы они были завернуты в оператор switch вместо использования кучи else if conditions. Любая помощь будет отличной!!!

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?
4b9b3361

Ответ 1

В CoffeeScript есть две формы switch:

switch expr
    when expr1 then ...
    when expr2 then ...
    ...
    else ...

и

switch
    when expr1 then ...
    when expr2 then ...
    ...
    else ...

Вторая форма может помочь вам:

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

Вы можете оставить else null, если undefined является допустимым значением для view. Вы можете также обернуть логику в (явной) функции:

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

Предоставление вашей логики имени (т.е. обертывание его в функции) часто полезно для уточнения кода.

Ответ 2

В дополнение к деталям в принятом ответе инструкции switch в CoffeeScript также поддерживают ,, чтобы предоставить несколько результатов сопоставления:

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

или (если ваши утверждения имеют несколько строк):

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