2012-04-13 69 views
5

我想從underscore template更改爲mustache.js從下劃線模板到mustache.js

既然在mustache.js中沒有if statements我該如何更改這段代碼才能使用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> 
<% } %> 

我的解決辦法是:

{{#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}} 

它適用於總變量,因爲它可能是0或更多,但我不知道什麼是解決它的剩餘變量,最好的辦法,其可以是1或更多。

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

它應該是這樣的:

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

它不工作,因爲剩下的可能是1或更多。

回答

3

在你看來,你可以做這樣的事情:

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

如果你只是移動到一個新的模板框架,我會建議使用handlebars.js。這支持if語句如下:

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

根據'Handlebars'文檔'if語句'以這種方式工作:如果它的參數返回false,undefined,null或[](一個「falsy」值) ,「把手」不會渲染該塊。但這相當於在小鬍子中設置了「{{#total}}」和「{{^ total}}」。 – underscore666 2012-04-14 08:12:44