Tôi có thể sử dụng câu lệnh điều kiện với các mẫu EJS (trong JMVC) không?


101

và nếu có, thì cú pháp là gì? Mục tiêu của tôi là thêm 's' vào từ 'bình luận' khi có nhiều hơn một. trong mẫu jQuery.ejs trong ứng dụng JMVC. Những lần nghỉ sau. Tôi không thể tìm thấy bất kỳ tài liệu nào cho các điều kiện ...

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

Cú pháp của bạn có vẻ đúng và phù hợp với tôi. Bạn có chắc chắn rằng var commentsNumber tồn tại và là một số nguyên không?
Ryan Crispin Heneise

1
Vâng, lạ là điều kiện không được đề cập trong tài liệu!
UpTheCreek

Câu trả lời:


171

Đối với những người khác gặp phải vấn đề này, bạn cũng có thể sử dụng các tham số / đạo cụ ejs trong các câu lệnh điều kiện:

Tệp công thức nấu ăn.js:

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

Công thức.ejs Tệp:

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

3
Trong trường hợp của một includecâu lệnh, bạn có thể viết nội dòng có điều kiện không? Đó là văn bản <% if (true) { include foo/bar } %>dường như bị lỗi. Có một phương pháp tương tự hay là nó cần thiết để phá vỡ includetừng <% %>.
kuanb

Cảm ơn, tôi đã tìm kiếm câu trả lời này trước khi thử nó.
CTala

Cảm ơn bạn! Tôi đang cố gắng hiển thị các phần tử có điều kiện từ các thay đổi trên máy chủ. Câu trả lời của bạn cho tôi thấy rằng tôi cần phải đánh giá mọi thứ về khách hàng.
buildpax

161

Các điều kiện hoạt động nếu chúng được cấu trúc chính xác, tôi đã gặp vấn đề này và tìm ra nó.

Đối với các điều kiện, thẻ trước đó elsephải được ghép nối với thẻ kết thúc của trước đó ifnếu không các câu lệnh sẽ đánh giá riêng biệt và tạo ra lỗi.

LỖI!

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

Chính xác

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

hy vọng điều này sẽ giúp.


2
Cảm ơn !! Điều này khiến tôi bị mắc kẹt trong một thời gian.
xblymmx

3
Điều này cực kỳ hữu ích vì tôi đang gặp phải một vấn đề trong đó tôi đang đặt của mình elsevào một dòng khác như khối mã đầu tiên mà bạn đã đề cập. Cảm ơn rất nhiều vì đã bao gồm những ví dụ này !!
Michael Platt

22

EJS dường như hoạt động khác nhau tùy thuộc vào việc bạn có sử dụng ký hiệu {} hay không:

Tôi đã kiểm tra và điều kiện sau được đánh giá như bạn mong đợi:

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

trong khi cái này không:

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

11
Bạn có mong đợi một ký tự khoảng trắng duy nhất làm được điều gì đó không?
UpTheCreek

22

Có, Bạn có thể sử dụng câu lệnh điều kiện với EJS như if else, toán tử bậc ba hoặc thậm chí trường hợp chuyển đổi cũng được

Ví dụ

Toán tử bậc ba : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Chuyển đổi trường hợp

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

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

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

} %>

16

Bạn cũng có thể sử dụng else ifcú pháp:

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

4
những gì bạn cần để làm nổi bật ở đây là khung bế mạc đã nhất dứt khoát được sử dụng trong cùng một dòng như khác / else if
Paulo

1

Tôi biết đây là câu trả lời hơi muộn,

bạn có thể sử dụng câu lệnh if và else trong ejs như sau

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

Nhưng có một điều khác tôi muốn nhấn mạnh là nếu bạn sử dụng mã theo cách này,

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

Nó sẽ tạo ra một lỗi.

Hy vọng điều này sẽ giúp ích cho ai đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.