limitar los resultados de cada uno en handlebars.js

He escrito un pequeño complemento que muestra tweets. siguiente es el código que realiza un bucle y muestra los tweets.

 {{#each this}} 
  • {{tweet}}

    {{author}}
  • {{/each}}

    Pero lo que quiero hacer es limitar el número de tweets a 5 o 10. Pero el ciclo enumera todos los tweets disponibles. ¿Cómo limito los tweets como en for loop? me gusta

      for(i=0;i<5;i++){display the tweets} 

    Creo que tienes dos opciones:

    1. Limite el tamaño de su colección antes de entregarla a Handlebars.
    2. Escribe tu propio ayudante de locking que te permita especificar un límite.

    La implementación real de each aplicación es bastante simple, por lo que adaptarla para incluir un límite superior es bastante sencilla:

     // Warning: untested code Handlebars.registerHelper('each_upto', function(ary, max, options) { if(!ary || ary.length == 0) return options.inverse(this); var result = [ ]; for(var i = 0; i < max && i < ary.length; ++i) result.push(options.fn(ary[i])); return result.join(''); }); 

    Luego en tu plantilla:

      

    Estoy de acuerdo en que duplicar each no es una buena idea, como dice Dtipson .

    Su enfoque propuesto con el limit helper es de hecho la mejor manera de IMO, aquí está el código necesario para implementarlo:

     // limit an array to a maximum of elements (from the start) Handlebars.registerHelper('limit', function (arr, limit) { if (!_.isArray(arr)) { return []; } // remove this line if you don't want the lodash/underscore dependency return arr.slice(0, limit); }); 

    Y luego en su plantilla (suponiendo que su matriz es cart.products ):

     {{#each (limit cart.products 5)}} 
  • Index is {{@index}} - element is {{this}}
  • {{/each}}

    Necesitas una versión reciente del manubrio que admita sub-expresiones para que esto funcione, por supuesto.

    “cada” ya no es muy simple: https://github.com/wycats/handlebars.js/blob/master/lib/handlebars/base.js#L99

    Esto se debe a que ahora cada uno admite una gran cantidad de información de bucles a la que probablemente todavía desee tener acceso.

    Por lo tanto, es preferible limitar la información desde el principio si no desea volver a implementar los datos de forma mucho más complicada. También puede intentar usar una subexpresión dentro de cada uno (es decir, un {{#each (datos de límite 6)}} si está utilizando la última versión de manubrios.

    Simplemente eche un vistazo al valor de {{@index}} y envuélvalo en un bloque de {{#if}} . Si el índice es mayor que un cierto número, entonces no renderiza el marcado.

     var collection = { ... tweets ... } {{#each collection}} {{#if @index < 5}}  {{/if}} {{/each}}