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

Подчеркивание шаблонов: не удается переключиться на работу

Я не могу получить простой оператор 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> 
<% } %>

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

4b9b3361

Ответ 1

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

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

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

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

Но JavaScript switch должен содержать инструкции case и пустой оператор (т.е. ; in 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" ...');
   ...
} %>

но это немного уродливо (IMHO). Подробнее см. В _.template документации.


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

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

но это будет:

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

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

Ответ 2

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

<% 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; } %>

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