2012-04-13 22 views
5

Me gustaría cambiar de underscore template a mustache.js.desde la plantilla de subrayado a mustache.js

Dado que en mustache.js no hay if statements, ¿cómo puedo cambiar este código para usar 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> 
<% } %> 

Mi solución es:

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

funciona para variables totales, ya que podría ser 0 o más, pero no tengo ni idea de lo que es la mejor manera de fijarla en la variable restante, que podría ser 1 o más.

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

Debe ser algo así:

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

No funciona porque restante podría ser de 1 o más.

Respuesta

3

En su opinión se podría hacer algo como esto:

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

Si su simplemente moviendo a un nuevo marco de plantillas, yo recomendaría usar handlebars.js. Esto tiene soporte para si las declaraciones de la siguiente manera:

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

De acuerdo con la documentación de '' Handlebars' si statements' funciona de esta manera: Si su argumento devuelve falso, no definido, nula o [] (un valor "Falsy") , 'Handlebars' no representará el bloque. Pero esto es equivalente a hacer '{{#total}}' y '{{^ total}}' en bigote. – underscore666

Cuestiones relacionadas