ฉันสามารถใช้คำสั่งเงื่อนไขกับเทมเพลต EJS (ใน JMVC) ได้หรือไม่


105

และถ้าใช่ไวยากรณ์คืออะไร? เป้าหมายของฉันคือนำหน้า 's' ไปยังคำว่า 'ความคิดเห็น' เมื่อมีมากกว่าหนึ่ง ในเทมเพลต jQuery.ejs ในแอป JMVC หยุดพักต่อไปนี้ ไม่พบเอกสารเงื่อนไขใด ๆ ...

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

ไวยากรณ์ของคุณถูกต้องและใช้ได้กับฉัน แน่ใจหรือว่า var commentsNumber มีอยู่และเป็นจำนวนเต็ม?
Ryan Crispin Heneise

1
ใช่แปลกที่ไม่มีการกล่าวถึงเงื่อนไขในเอกสาร!
UpTheCreek

คำตอบ:


175

สำหรับคนอื่น ๆ ที่สะดุดกับสิ่งนี้คุณยังสามารถใช้ ejs params / props ในประโยคเงื่อนไข:

formula.js ไฟล์:

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

ไฟล์ formula.ejs:

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

3
ในกรณีของincludeคำสั่งสามารถเขียนอินไลน์ตามเงื่อนไขได้หรือไม่? ที่เขียน<% if (true) { include foo/bar } %>ดูเหมือนจะผิดพลาด มีวิธีการที่คล้ายกันหรือมีความจำเป็นที่จะทำลายออกโดยinclude <% %>
kuanb

ขอบคุณฉันกำลังค้นหาคำตอบนี้ก่อนที่จะลองใช้
CTala

ขอบคุณ! ฉันพยายามแสดงองค์ประกอบตามเงื่อนไขจากการเปลี่ยนแปลงบนเซิร์ฟเวอร์ คำตอบของคุณแสดงให้ฉันเห็นว่าฉันจำเป็นต้องประเมินทุกอย่างเกี่ยวกับลูกค้า
buildpax

168

เงื่อนไขทำงานได้หากมีโครงสร้างอย่างถูกต้องฉันพบปัญหานี้และคิดออก

สำหรับเงื่อนไขแท็กก่อนหน้าelseจะต้องจับคู่กับแท็กปิดท้ายของก่อนหน้านี้ifมิฉะนั้นคำสั่งจะประเมินแยกกันและทำให้เกิดข้อผิดพลาด

ผิดพลาด!

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

แก้ไข

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

หวังว่านี่จะช่วยได้


3
ขอบคุณ !! สิ่งนี้ติดฉันไปชั่วขณะ
xblymmx

3
สิ่งนี้มีประโยชน์อย่างเหลือเชื่อเมื่อฉันพบปัญหาที่ฉันวางelseบรรทัดอื่นเช่นบล็อกรหัสแรกที่คุณพูดถึง ขอบคุณมากสำหรับการรวมตัวอย่างเหล่านี้ !!
Michael Platt

23

ได้คุณสามารถใช้คำสั่งเงื่อนไขกับ EJS เช่น if else, ternary operator หรือแม้แต่ switch case ก็ได้เช่นกัน

ตัวอย่างเช่น

ตัวดำเนินการ Ternary : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

สลับกรณี

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

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

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

} %>

22

ดูเหมือนว่า EJS จะทำงานแตกต่างกันไปขึ้นอยู่กับว่าคุณใช้สัญกรณ์ {} หรือไม่:

ฉันได้ตรวจสอบและประเมินเงื่อนไขต่อไปนี้ตามที่คุณคาดหวัง:

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

ในขณะที่สิ่งนี้ไม่:

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

11
คุณคาดหวังให้อักขระเว้นวรรคตัวเดียวทำอะไรหรือไม่?
UpTheCreek

16

คุณยังสามารถใช้else ifไวยากรณ์:

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

4
สิ่งที่คุณต้องเน้นที่นี่คือวงเล็บปิดจะต้องถูกใช้อย่างชัดเจนที่สุดในบรรทัดเดียวกับที่อื่น / อื่น ๆ ถ้า
เปาโล

1

ฉันรู้ว่านี่เป็นคำตอบที่ช้าไปหน่อย

คุณสามารถใช้คำสั่ง if และ else ใน ejs ได้ดังนี้

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

แต่มีอีกสิ่งหนึ่งที่ฉันอยากจะเน้นคือถ้าคุณใช้โค้ดในลักษณะนี้

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

มันจะสร้างข้อผิดพลาด

หวังว่านี่จะช่วยให้ใครบางคน


0

เพียงแค่ทำให้โค้ดสั้นลงคุณก็สามารถใช้คุณสมบัติ ES6 ได้ สิ่งเดียวกันสามารถเขียนเป็น

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

และ Templeate สามารถแสดงผลได้เหมือนกัน!

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.