2013-04-11 3 views
13

Я не могу получить простой оператор switch, работающий в моем шаблоне подчеркивания. Он использует значение переменной UserType, которое я проверил, и отображает ее с помощью <% = UserType%>.Подчеркивание шаблонов: не удается переключиться на работу

Код придумывают:

<% switch(UserType) { %> 
    <% case 13: %> 
     <button id="schoolButton" value="schools" class="gridChooser k-textbox">Schools</button> 
    <% case 12: %> 
     <button id="teacherButton" value="teachers" class="gridChooser k-textbox">Teacher</button> 
    <% case 8: %> 
     <button id="classButton" value="classes" class="gridChooser k-textbox">Classes</button> 
     <button id="testButton" value="tests" class="gridChooser k-textbox">Test</button> 
<% } %> 

Любая помощь очень ценится - спасибо.

ответ

20

Проблема заключается в том, что Underscore будет добавлять концевые точки с запятой при преобразовании шаблона в JavaScript. Таким образом, простой switch так:

<% switch(x) { %> 
<% case 11: %> 
    <button> 
<% } %> 

становится JavaScript, который выглядит следующим образом:

switch(x) { ; 
case 11: ; 
    // something to output '<button>' goes here 
} ; 

, но JavaScript switch должен содержать case заявления и пустое заявление (т.е. ; в switch(x) { ;) Безразлично Нет.

Я не могу думать ни о каком здравом образом обойти эту проблему, так что я бы просто перейти на if и перейти к более интересным проблемам:

<% if(UserType === 13) { %> 
    <button id="schoolButton" value="schools" class="gridChooser k-textbox">Schools</button> 
<% } else if(UserType === 12) { %> 
    <button id="teacherButton" value="teachers" class="gridChooser k-textbox">Teacher</button> 
<% } else if(UserType === 8) { %> 
    <button id="classButton" value="classes" class="gridChooser k-textbox">Classes</button> 
    <button id="testButton" value="tests" class="gridChooser k-textbox">Test</button> 
<% } %> 

Вы можете также превратить его наизнанку и использовать print:

<% switch(UserType) { 
    case 13: 
     print('<button id="schoolButton" ...'); 
    ... 
} %> 

но это немного уродливые (ИМХО). Подробности см. На странице _.template documentation.


Обратите внимание, что эта точка с запятой обман также, почему ваши if s должны включать фигурные скобки в шаблоне Underscore, даже если JavaScript не требует от них. Так что это не будет работать:

<% if(pancakes) %> 
    <%= pancakes %> 

, но это будет:

<% if(pancakes) { %> 
    <%= pancakes %> 
<% } %> 

То же самое относится к петлям.

+0

Замечательный ответ. Спасибо за объяснение, почему ожидаемое решение не работает. –

+0

@ DanM: Спасибо. Я должен был копаться в скомпилированной версии шаблона, поэтому я решил, что должен поделиться тем, что нашел: если я не могу это объяснить, тогда я этого не понимаю, если я этого не понимаю, тогда я не понимаю, чувствую себя правильно, отвечая. –

10

Вы можете сделать:

<% switch(UserType) { case 13: %> 
    <button id="schoolButton" value="schools" class="gridChooser k-textbox">Schools</button> 
    <% break; case 12: %> 
    <button id="teacherButton" value="teachers" class="gridChooser k-textbox">Teacher</button> 
    <% break; case 8: %> 
    <button id="classButton" value="classes" class="gridChooser k-textbox">Classes</button> 
    <button id="testButton" value="tests" class="gridChooser k-textbox">Test</button> 
<% break; } %> 

Это не "комфортно" решение, но и не так. Просто работает.

 Смежные вопросы

  • Нет связанных вопросов^_^