2013-04-11 63 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; } %> 

它不是一个 “舒适” 的解决方案,但也不是错误的。只是工作。