15

アンダースコア テンプレートで単純な 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> 
<% } %>

どんな助けでも大歓迎です - ありがとう。

4

2 に答える 2

24

問題は、テンプレートを JavaScript に変換するときに Underscore がセミコロン ターミネータを追加することです。したがって、次のような単純switchなもの:

<% switch(x) { %>
<% case 11: %>
    <button>
<% } %>

次のような JavaScript になります。

switch(x) { ;
case 11: ;
    // something to output '<button>' goes here
} ;

しかし、JavaScriptにはステートメントswitchを含める必要がcaseあり、空のステートメント (つまり;in 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" ...');
   ...
} %>

しかし、それは少し醜いです(IMHO)。詳細については、_.templateドキュメントを参照してください。


このセミコロンの策略は、ifたとえ JavaScript が必要としない場合でも、あなたの s がアンダースコア テンプレートに中かっこを含めなければならない理由でもあることに注意してください。したがって、これは機能しません:

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

しかし、これは:

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

同じことがループにも当てはまります。

于 2013-04-11T17:16:28.073 に答える
13

できるよ:

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

これは「快適な」解決策ではありませんが、どちらも間違っていません。ただ動作します。

于 2013-10-01T03:55:07.323 に答える