2013-04-11 24 views
13

Altyazı şablonumda çalışan basit bir anahtar deyimi bulamıyorum. <% UserType%> ile görüntüleyerek var olan kontrol ettiğim UserType adlı bir değişkenin değerini kullanıyor. geliyorGeçici çalışma: İşe geçiş yapamıyor

Kodu:

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

çok takdir Herhangi bir yardım - teşekkürler.

cevap

20

Sorun şu ki, şablonunuzu JavaScript'e dönüştürürken Underscore, noktalı virgül sonlandırıcıları ekleyecektir. Yani, bu gibi basit switch:

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

şöyle JavaScript haline gelir:

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

Ama case ifadeleri ve (yani switch(x) { ; içinde ;) boş bir ifade yer için bir JavaScript switch ihtiyaçlarını gelmez yeter.

Ben sadece bir if geçmek ve daha ilginç problemlere geçmek istiyorum bu soruna herhangi aklı başında bir şekilde düşünemiyorum

:

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

Ayrıca iç-out ve kullanımını çevirir misin print:

<% switch(UserType) { 
    case 13: 
     print('<button id="schoolButton" ...'); 
    ... 
} %> 

ama bu biraz çirkin (IMHO) bulunuyor. Ayrıntılar için _.template documentation'a bakın. Bu noktalı virgül hile JavaScript bunları gerektirmez bile, if ler bir alt çizgi şablona parantezler içermelidir neden de olduğunu


Not. Yani bu işe yaramaz:

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

ama bu irade: Aynı döngüler için geçerlidir

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

.

+0

Harika yanıt. Beklenen çözümün neden çalışmadığını açıkladığınız için teşekkür ederiz. –

+0

@DanM: Teşekkürler. Şablonun derlenmiş halini araştırmak zorunda kaldım, bu yüzden bulduklarımı paylaşmam gerektiğini düşündüm: eğer açıklayamasam sonra anlayamıyorum, eğer anlamıyorsam o zaman doğru cevaplama hissediyorum. –

10

Sen yapabilirsiniz:

<% 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; } %> 
Bu bir "rahat" bir çözüm değildir

, ama hiçbiri yanlış. Sadece çalışır.