2014-12-16 16 views
25

Nhìn vào hướng dẫn này Using Blaze, có vẻ như Blaze hỗ trợ các câu lệnh {{#if}}{{else}}, nhưng tôi chưa thấy các ví dụ về câu lệnh if-else. Điều này có được hỗ trợ trong Blaze không? Hoặc tôi phải làm thêm nếu khối bên trong khối khác, có thể trở nên xấu xí.Meteor + Blaze - Nếu tuyên bố khác

Tôi đã thử {{else if}} nhưng đã xảy ra lỗi.

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}} 

Trả lời

50

Spacebars sử dụng cấu trúc dòng điều khiển tương tự như handlebars nên câu trả lời là giống như this one. Trong trường hợp của bạn:

{{#if en}} 
    {{text.en}} 
{{else}} 
    {{#if tc}} 
    {{text.tc}} 
    {{/if}} 
{{/if}} 

Side note - một trong những điều tốt đẹp về jade là nó hỗ trợ else if.


Đôi khi một sự thay thế tốt hơn là để di chuyển logic thành một helper như thế này:

Template.myTemplate.helpers({ 
    textValue: function() { 
    if (this.en) { 
     return this.text.tc; 
    } else if (this.tc) { 
     return this.text.tc; 
    } 
    } 
}); 
<template name="myTemplate"> 
    <p>{{textValue}}</p> 
</template> 
+0

Cám ơn câu trả lời của bạn. Nhưng nếu tôi có nhiều câu lệnh 'else if' khác thì sao? Làm theo cách này sẽ trở nên xấu xí. Không có lựa chọn thay thế? – dayuloli

+0

Chỉ sử dụng mẫu, không có cách thay thế. Tôi khuyên bạn nên thêm một trình trợ giúp mẫu để trả lại giá trị bạn cần. –

+0

Tôi không biết cách thực hiện điều đó vào lúc này. Tôi sẽ đọc nó. Cảm ơn bạn đã trả lời và làm rõ! Tôi đã sử dụng tất cả các phiếu bầu của tôi cho ngày hôm nay. Sẽ +1 vào ngày mai! – dayuloli

4

Tiếp theo từ câu trả lời tuyệt vời @ David Wheldon, nó cũng đáng chú ý mà bạn có thể vượt qua các thông số với các hàm trợ giúp JavaScript của bạn từ mẫu Blaze của bạn.

Vì vậy, ví dụ đoạn code dưới đây có chọn lọc làm cho các tùy chọn cho một danh sách lựa chọn bằng cách gọi phương thức helper với dòng isSelected region customerCompany:

{{#if isSelected region customerCompany}} 
     <option value={{region._id}} selected>{{region.name}}</option> 
    {{else}} 
     <option value={{region._id}}>{{region.name}}</option> 
    {{/if}} 

và sau đó trong file js:

isSelected: function (region, customer) { 

    return customer.salesRegionId === region._id; 
}, 

Cách tiếp cận này để chuyển các biến của bạn tới người giúp đỡ của bạn thường được khuyến nghị để tránh nhầm lẫn có thể nảy sinh với ý nghĩa thay đổi của từ khóa this khi sử dụng mẫu.

1

Phiên bản hiện tại của Blaze hỗ trợ khác nếu - xem dưới đây để biết định dạng mẫu và tham chiếu đến độ phân giải vấn đề github.

{{#if isUserProfile}} 
    <h3>User Profile</h3> 
{{else if isLawyerProfile}} 
    <h3>Lawyer Profile</h3> 
{{else}} 
    <h3>Test</h3> 
{{/if}} 

liên kết tham khảo: GitHub Else If Issue Resoltion