Problem polega na tym, że podkreślenie spowoduje dodanie terminatorów średnika podczas konwersji szablonu do JavaScript. Tak więc, prosty switch
tak:
<% switch(x) { %>
<% case 11: %>
<button>
<% } %>
staje JavaScript, który wygląda tak:
switch(x) { ;
case 11: ;
// something to output '<button>' goes here
} ;
ale JavaScript switch
musi zawierać case
oświadczenia i pustego komunikatu (czyli ;
w switch(x) { ;
) robi zakwalifikuj się.
Nie mogę myśleć o jakiejkolwiek zdrowy sposób obejść ten problem, więc ja po prostu przełączyć się na if
i przejść do bardziej interesujących problemów:
<% 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>
<% } %>
Można również włączyć go na lewą stronę i wykorzystanie print
:
<% switch(UserType) {
case 13:
print('<button id="schoolButton" ...');
...
} %>
ale to trochę brzydkie (IMHO). Szczegółowe informacje można znaleźć w dokumencie _.template
documentation.
Zauważ, że ten średnik oszustwo jest również, dlaczego if
s musi zawierać nawiasy w szablonie podkreślenia nawet jeśli JavaScript nie wymaga od nich. Więc to nie będzie działać:
<% if(pancakes) %>
<%= pancakes %>
ale to będzie:
<% if(pancakes) { %>
<%= pancakes %>
<% } %>
To samo stosuje się do pętli.
Wspaniała odpowiedź. Dziękuję za wyjaśnienie, dlaczego oczekiwane rozwiązanie nie działa. –
@DanM: Dzięki. Musiałem zagłębiać się w skompilowaną wersję szablonu, więc pomyślałem, że powinienem podzielić się tym, co znalazłem: jeśli nie potrafię tego wyjaśnić, to nie rozumiem tego, jeśli tego nie rozumiem, to nie rozumiem. czuję się dobrze, odpowiadając. –