2013-04-11 47 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

問題是,將模板轉換爲JavaScript時,Underscore會添加分號終止符。所以,一個簡單的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小號必須包括一個下劃線模板支架即使JavaScript不要求他們。所以這是行不通的:

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

但這會:

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

這同樣適用於循環。

+0

精彩的回答。感謝您解釋爲什麼預期的解決方案無法正常工作。 – 2014-07-23 17:16:17

+0

@DanM:謝謝。我不得不在模板的編譯版本中進行挖掘,所以我想我應該分享我發現的內容:如果我無法解釋它,那麼我不理解它,如果我不明白它,那麼我不會感覺正確的回答。 – 2014-07-23 18:17:35

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

它不是一個 「舒適」 的解決方案,但也不是錯誤的。只是工作。