2012-08-03 39 views
9

Có thể sử dụng biến toàn cầu trong Handlebars điều kiện không? Tôi đang viết một ứng dụng liệt kê rất nhiều đối tượng và tôi muốn người dùng có thể kiểm soát chi tiết nào được liệt kê. Ví dụ, chỉ hiển thị tên đầu tiên trong danh sách những người, như vậy:Biến toàn cục trong Handlebars nếu chặn

<ul> 
{{#each people}} 
    <li> 
     <p>{{firstName}}</p> 
     {{#if displayLastnames}} 
     <p>{{lastName}}</p> 
     {{/if}} 
    </li> 
{{/each}} 
</ul> 

Tôi không muốn thực sự sửa đổi dữ liệu (ví dụ, bằng cách loại bỏ các thuộc tính lastName và làm {{#if lastName}}).

Trả lời

15

Bạn cũng có thể đăng ký một helper toàn cầu có tên là 'displayLastnames' và sử dụng nó trong một nếu:

Handlebars.registerHelper('displayLastnames', function(block) { 
    return displayLastnames; //just return global variable value 
    }); 

và chỉ sử dụng nó như trong mẫu của bạn:

{{#if displayLastnames}} 
    <p>{{lastName}}</p> 
    {{/if}} 
+0

[Ví dụ] (http://jsfiddle.net/Y34b4/5/). Tôi thích phương pháp này tốt hơn. Cảm ơn! –

+0

không hoạt động cho Handlebars 2.0.0 –

+0

thậm chí không hoạt động đối với 1.0.0, '[Error] TypeError: undefined không phải là một đối tượng (đánh giá 'depth0.global_var')', fiddle này chỉ hoạt động cho 1.0.0.beta6 ! –

7

Tay lái không gian tên biến để bạn không thể truy cập trực tiếp vào các biến toàn cục. Có lẽ là điều dễ nhất để làm là thêm helper của riêng bạn, một cái gì đó đơn giản như thế này:

Handlebars.registerHelper('if_displayLastnames', function(block) { 
    if(displayLastnames) 
     return block.fn(this); 
    else 
     return block.inverse(this); 
}); 

và sau đó trong mẫu của bạn:

{{#if_displayLastnames}} 
<p>{{lastName}}</p> 
{{/if_displayLastnames}} 

Bạn có thể muốn đưa bạn biến "toàn cầu" trong không gian tên riêng của họ.

Demo: http://jsfiddle.net/ambiguous/Y34b4/

Các vấn đề liên quan