2012-04-13 11 views
5

Ich möchte von underscore template zu mustache.js wechseln.von Unterstreichungsvorlage zu mustache.js

Da in mustache.js gibt es keine if statements Wie kann ich dieses Stück Code ändern, um mustache.js zu verwenden?

<% 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> 
<% } %> 

Meine Lösung ist:

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

Es funktioniert für insgesamt variabel, weil es 0 sein könnte oder mehr, aber ich habe keine Ahnung, was der beste Weg ist, um es zu beheben auf Variable bleibt, die könnte 1 oder mehr sein.

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

Es sollte so etwas sein:

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

Es funktioniert nicht, weil noch 1 sein könnte oder mehr.

Antwort

3

Ihrer Meinung Sie so etwas wie dieses machen könnte:

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

Wenn Ihr nur auf ein neues Templat Rahmen bewegen, würde ich mit handlebars.js empfehlen. Dies hat die Unterstützung für if-Anweisungen wie folgt:

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

Nach der 'Handlebars' Dokumentation' wenn statements' auf diese Weise funktioniert: Wenn ihr Argument false zurückgibt, nicht definiert, null oder [] (eine "falsy" -Wert) , 'Lenker' werden den Block nicht rendern. Aber das ist gleichbedeutend mit '{{#total}}' und '{{^ total}}' im Schnurrbart. – underscore666