Проблема заключается в том, что 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 %>
<% } %>
То же самое относится к петлям.
Замечательный ответ. Спасибо за объяснение, почему ожидаемое решение не работает. –
@ DanM: Спасибо. Я должен был копаться в скомпилированной версии шаблона, поэтому я решил, что должен поделиться тем, что нашел: если я не могу это объяснить, тогда я этого не понимаю, если я этого не понимаю, тогда я не понимаю, чувствую себя правильно, отвечая. –