2013-04-11 18 views
13

Nie mogę uzyskać proste oświadczenie przełącznika działa w moim szablon podkreślenia. Używa wartości zmiennej o nazwie UserType, którą sprawdziłem, wyświetlając ją za pomocą <% = UserType%>.Podsumowania szablon: Nie można przejść do pracy

Kod wymyślanie:

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

Każda pomoc mile widziane - dzięki.

Odpowiedz

20

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.

+0

Wspaniała odpowiedź. Dziękuję za wyjaśnienie, dlaczego oczekiwane rozwiązanie nie działa. –

+0

@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. –

10

można zrobić:

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

To nie jest "wygodne" rozwiązanie, ale nie jest źle. Po prostu działa.