Dapatkah saya menggunakan pernyataan bersyarat dengan templat EJS (dalam JMVC)?


101

dan jika ya, apa sintaksnya? Tujuan saya adalah menambahkan 's' pada kata 'comment' jika ada lebih dari satu. di template jQuery.ejs di aplikasi JMVC. Istirahat berikut. Saya tidak dapat menemukan dokumen apa pun untuk persyaratan ...

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

Sintaks Anda terlihat benar, dan berfungsi untuk saya. Apakah Anda yakin bahwa var commentsNumber ada dan merupakan integer?
Ryan Crispin Heneise

1
Ya, aneh bahwa persyaratan tidak disebutkan di dokumen!
UpTheCreek

Jawaban:


171

Untuk orang lain yang tersandung dalam hal ini, Anda juga dapat menggunakan ejs params / props dalam pernyataan bersyarat:

File recipes.js:

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

Recipes.ejs File:

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

3
Dapatkah Anda, dalam kasus sebuah includepernyataan, menulis kondisional sebaris? Artinya tulisan tersebut <% if (true) { include foo/bar } %>tampaknya error. Apakah ada metode yang sama atau apakah perlu untuk keluar includeoleh <% %>.
kuanb

Terima kasih, saya sedang mencari jawaban ini sebelum mencobanya.
CTala

Terima kasih! Saya mencoba menampilkan elemen bersyarat dari perubahan di server. Jawaban Anda menunjukkan kepada saya bahwa saya harus mengevaluasi semua yang ada pada klien.
buildpax

161

Persyaratan berfungsi jika terstruktur dengan benar, saya mengalami masalah ini dan mengetahuinya.

Untuk conditional, tag sebelum elseharus dipasangkan dengan tag akhir sebelumnya ifjika laporan akan mengevaluasi secara terpisah dan menghasilkan kesalahan.

KESALAHAN!

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

Benar

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

semoga ini membantu.


2
Terima kasih !! Ini membuat saya terjebak untuk sementara waktu.
xblymmx

3
Ini sangat membantu karena saya mengalami masalah di mana saya menempatkan saya elsedi baris yang berbeda seperti blok kode pertama yang Anda sebutkan. Terima kasih banyak telah menyertakan contoh ini !!
Michael Platt

22

EJS tampaknya berperilaku berbeda bergantung pada apakah Anda menggunakan {} notasi atau tidak:

Saya telah memeriksa dan kondisi berikut dievaluasi seperti yang Anda harapkan:

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

sementara yang ini tidak:

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

11
Apakah Anda mengharapkan satu karakter spasi melakukan sesuatu?
UpTheCreek

22

Ya, Anda dapat menggunakan pernyataan bersyarat dengan EJS seperti if else, operator ternary atau bahkan switch case juga

Sebagai contoh

Operator terner : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Ganti Kasus

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

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

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

} %>

16

Anda juga dapat menggunakan else ifsintaks:

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

4
Apa yang perlu Anda soroti di sini adalah bahwa kurung tutup harus paling pasti digunakan di baris yang sama seperti else / else if
Paulo

1

Saya tahu ini adalah jawaban yang agak terlambat,

Anda dapat menggunakan pernyataan if dan else di ejs sebagai berikut

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

Tapi ada hal lain yang ingin saya tekankan adalah jika Anda menggunakan kode dengan cara ini,

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

Ini akan menghasilkan kesalahan.

Semoga ini bisa membantu seseorang

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.