EJS şablonlarıyla (JMVC'de) koşullu ifadeler kullanabilir miyim?


102

ve evet ise, sözdizimi nedir? Amacım, birden fazla olduğunda 'yorum' kelimesinin başına bir 's' eklemek. JMVC uygulamasındaki bir jQuery.ejs şablonunda. Aşağıdaki molalar. Koşul ifadeleri için herhangi bir belge bulamıyorum ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>

Söz diziminiz doğru görünüyor ve benim için çalışıyor. Var commentsNumber'ın var olduğundan ve bir tam sayı olduğundan emin misiniz?
Ryan Crispin Heneise

1
Evet, belgelerde koşulların belirtilmemesi garip!
UpTheCreek

Yanıtlar:


172

Buna rastlayan diğerleri için, koşullu ifadelerde ejs params / props da kullanabilirsiniz:

tarifler.js Dosyası:

app.get("/recipes", function(req, res) {
    res.render("recipes.ejs", {
        recipes: recipes
    });
});

tarifler.ejs Dosyası:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>

3
Bir includeifade durumunda , koşullu satır içi yazabilir misiniz? Yazmak <% if (true) { include foo/bar } %>hata gibi görünüyor. Bir yöntem benzer var mı yoksa patlak gerekmektedir includebiriminin by <% %>.
kuanb

Teşekkürler, denemeden önce bu cevabı arıyordum.
CTala

Teşekkür ederim! Sunucudaki değişikliklerden koşullu öğeleri görüntülemeye çalışıyordum. Cevabınız, müşteriyle ilgili her şeyi değerlendirmem gerektiğini bana gösterdi.
buildpax

163

Koşul ifadeleri doğru yapılandırılırsa işe yarar, bu konuyla karşılaştım ve çözdüm.

Koşul ifadeleri için else, önceki etiketin bir öncekinin bitiş etiketiyle eşleştirilmesi gerekir, ifaksi takdirde ifadeler ayrı ayrı değerlendirilir ve bir hata oluşturur.

HATA!

<% if(true){ %>
   <h1>foo</h1>
<% } %>
<% else{ %>
   <h1>bar</h1>
 <% } %>

Doğru

<% if(true){ %>
   <h1>foo</h1>
 <% } else{ %>  
   <h1>bar</h1>
<% } %>

umarım bu yardımcı olmuştur.


2
Teşekkürler !! Bu beni bir süre sıkıştı.
xblymmx

3
elseBahsettiğiniz ilk kod bloğu gibi farklı bir satıra koyduğum bir sorunla karşılaştığım için bu inanılmaz derecede yardımcı oldu . Bu örnekleri dahil ettiğiniz için çok teşekkürler !!
Michael Platt

22

{} Gösterimi kullanıp kullanmamanıza bağlı olarak EJS farklı davranıyor gibi görünüyor:

Kontrol ettim ve beklediğiniz gibi aşağıdaki durum değerlendirildi:

<%if (3==3) {%>  TEXT PRINTED  <%}%>
<%if (3==4) {%>  TEXT NOT PRINTED  <%}%>

bu değil:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  

11
Tek bir boşluk karakterinin bir şeyler yapmasını bekler miydiniz?
UpTheCreek

22

Evet, EJS ile koşullu ifadeyi başka ise, üçlü operatör veya hatta durum değiştirme gibi kullanabilirsiniz.

Örneğin

Üçlü operatör : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Yer değiştir

<% switch (role) {
case 'Admin' : %>
        Super Admin
        <% break;

case 'eventAdmin' : %>
        Event Admin
        <% break;

case 'subAdmin' : %>
        Sub Admin
        <% break;

} %>

16

Ayrıca else ifsözdizimini de kullanabilirsiniz :

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>

4
burada vurgulamanız gereken şey, kapanış parantezinin en kesin olarak else / else if ile aynı satırda kullanılması gerektiğidir
Paulo

1

Bunun biraz geç cevap olduğunu biliyorum

ejs'deki if ve else ifadelerini aşağıdaki gibi kullanabilirsiniz

<% if (something) { %>
   // Then do some operation
<% } else { %>
   // Then do some operation
<% } %>

Ancak vurgulamak istediğim başka bir şey var, kodu bu şekilde kullanırsanız,

<% if (something) { %>
   // Then do some operation
<% } %>
<% else { %>
   // Then do some operation
<% } %>

Bir hata üretecektir.

Umarım bu birine yardımcı olur


0

Sadece kodu kısaltarak ES6 özelliklerini kullanabilirsiniz. Aynı şeyler şu şekilde yazılabilir:

app.get("/recipes", (req, res) => {
    res.render("recipes.ejs", {
        recipes
    });
}); 

Ve Templeate aynı şekilde oluşturulabilir!

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.