2012-04-13 33 views
5

Tôi muốn thay đổi từ underscore template thành mustache.js.từ mẫu gạch dưới đến mustache.js

Vì trong mustache.js không có if statements làm cách nào để thay đổi đoạn mã này để sử dụng mustache.js?

<% if (done) { %> 
<span class="todo-clear"> 
    <a href="#"> 
    Clear <span class="number-done"><%= done %></span> 
    completed <span class="word-done"><%= done === 1 ? 'item' : 'items' %></span> 
    </a> 
</span> 
<% } %> 

giải pháp của tôi là:

{{#total}} 
     <span class="todo-count">{{ total }} 
      <span class="number">{{ remaining }}</span> 
      <span class="word"><%= remaining == 1 ? 'item' : 'items' %></span> left.--> 
     </span> 
      <span class="hint"> 
      Drag tasks from one list into another and vice versa. 
      </span> 
{{/total}} 

Nó hoạt động cho tổng biến, bởi vì nó có thể là 0 hoặc nhiều hơn, nhưng tôi không có ý tưởng cách tốt nhất để sửa chữa nó trên biến còn lại, là những gì mà có thể là 1 hoặc nhiều hơn.

<span class="word"><%= remaining == 1 ? 'item' : 'items' %></span> left.</span> 

Nó phải là một cái gì đó như thế:

<span class="word"> 
    {{#remaining}} 'items' {{/remaining}} 
    {{^remaining}} 'item' {{/remaining}} 
</span> 

Nó không làm việc vì còn lại có thể là 1 hoặc nhiều hơn.

Trả lời

3

Theo quan điểm của bạn, bạn có thể làm một cái gì đó như thế này:

Mustache.render(yourTemplate, { 
    remaining: items.length > 1 ? true : false 
} 
2

Nếu bạn chỉ cần di chuyển tới một khuôn khổ khuôn mẫu mới, tôi sẽ khuyên bạn sử dụng handlebars.js. Điều này có hỗ trợ cho các phát biểu nếu như sau:

{{#if total}} 
    <span>something</span> 
{{else}} 
    <span>something else</span> 
{{/if}} 
+1

Theo tài liệu 'Handlebars' hoạt động theo cách này: Nếu đối số của nó trả về giá trị false, undefined, null hoặc [] (a" falsy ") , 'Handlebars' sẽ không hiển thị khối. Nhưng điều này tương đương với việc tạo ra '{{#total}}' và '{{^ total}}' trong bộ ria mép. – underscore666

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