2012-04-13 12 views
5

Vorrei passare da underscore template a mustache.js.dal modello di sottolineatura a moustache.js

Poiché in moustache.js non ci sono if statements come posso modificare questa parte di codice per utilizzare 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> 
<% } %> 

La mia soluzione è:

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

Si lavora per variabile totale, perché potrebbe essere 0 o più, ma non ho idea di che cosa è il modo migliore per risolvere il problema su variabili rimanenti, che potrebbe essere 1 o più.

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

Dovrebbe essere qualcosa di simile:

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

Non funziona perché restante potrebbe essere 1 o più.

risposta

3

Secondo lei si potrebbe fare qualcosa di simile:

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

Se il solo passare a un nuovo quadro di template, mi consiglia di utilizzare handlebars.js. Questo ha il supporto per istruzioni if ​​come segue:

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

Secondo la documentazione '' Handlebars' se statements' funziona in questo modo: se il suo argomento restituisce false, undefined, null o [] (un valore "falsy") , 'Handlebars' non renderà il blocco. Ma questo è equivalente a rendere '{{#total}}' e '{{^ ^}}' nei baffi. – underscore666

Problemi correlati