2012-06-14 711 views
14

quiero hacer algo como esto:¿Cómo hago que una plantilla sea condicional en función del tamaño de una colección?

<template name="list"> 
    <ul> 
    {{#if items}} 
     {{#each items}} 
     <li>{{itemContents}}</li> 
     {{/each}} 
    {{else}} 
    <li class="placeholder">There are no items in this list.</li> 
    {{/if}} 
    <ul> 
</template> 

donde items es una Meteor.cursor:

Template.list.items = function() { 
    return Items.find(); 
}; 

Sin embargo, el código anterior no funciona, como el condicional evaluará positivamente incluso si no hay elementos (lo cual es levemente sorprendente porque Handlebars evalúa [] como falsey). He intentado cambiar la condición de

{{#if items.count}} 

pero luego me sale el error críptico

Unknown helper 'items' 

Entonces, ¿hay una manera de escribir esta condición dentro de una plantilla manillares de meteoritos?

Respuesta

32

Esta sería la forma correcta de ir:

<template name="list"> 
    <ul> 
    {{#each items}} 
    <li>{{itemContents}}</li> 
    {{else}} 
    <li class="placeholder">There are no items in this list.</li> 
    {{/each}} 
    <ul> 
</template> 

Para más información echar un vistazo a handlebarsjs.com.

(Meteor utiliza Spacebars que se inspira en los manillares. Así que la sintaxis es casi lo mismo.)

+0

no debería funcionar el código OP si declarara elementos como este: ' Template.list.helpers ({ items: function() { return Items.find() } }; ' – rdk1992

+0

No lo creo. El problema con el que se estaba metiendo era que' []! == falso' – HaNdTriX

5

He estado evaluando manubrios durante las últimas semanas y tuve un problema similar. Lo que funcionó para mí fue leer la propiedad de longitud y agregar la etiqueta else.

{{#if competitions.length}} 
     <div class="game-score span-4"> 
     ...code goes here...  
     </div> 
    {{else}} 
     {{> allGameNotes}} 
    {{/if} 
+0

que no funciona para mí. Obtengo el mismo error que cuando trato de usar 'count'. En este caso, sería 'Competencias 'desconocidas'. –

10

pude conseguir mi plantilla a trabajar mediante el uso de with para cambiar el contexto de evaluación:

<template name="list"> 
    <ul> 
    {{#with items}} 
    {{#if count}} 
     {{#each this}} 
      <li>{{itemContents}}</li> 
     {{/each}} 
    {{else}} 
     <li class="placeholder">There are no items in this list.</li> 
    {{/if}} 
    {{/with}} 
    <ul> 
</template> 

Aviso las expresiones modificadas {{#if count}} y {{#each this}}.

Cuestiones relacionadas