Tableau de passe écrit dans le modèle à meteor / handlebars helper

j'ai un assistant qui s'appelle printArray qui imprime juste chaque élément dans un tableau. Cela fonctionne très bien lorsque je définis le tableau dans JS et le passe à l'Assistant via un objet contextuel. Ce que je veux faire est de définir le tableau directement dans le modèle, comme:

{{printArray arr=[1, 3, 4] }}

Malheureusement, le temps que cela arrive à mon aide,arr points undefined. Y a-t-il une syntaxe valide pour obtenir le tableau dans mon helper sans le définir dans javascript?

21
demandé sur Riley Lark 2013-05-28 07:30:55

5 réponses

vous devez utiliser un autre helper qui renvoie un tableau

Template.ArrayDemo.helpers({
    arrayValues: [1, 2, 3],
    printArray: function(arr) {
        for (i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }
    }
 });

maintenant vous pouvez le faire

{{printArray arr=arrayValues}}

2
répondu Syed Is Saqlain 2016-01-27 12:16:19

vous pouvez utiliser JavaScript arguments array pour accomplir quelque chose de ce genre. arguments array vous donne accès à chaque valeur passée à la fonction quand elle est appelée.

ceci vous permettra d'utiliser la syntaxe suivante:

{{printArray 1 3 4}}

Le code ressemble à ceci:

Handlebars.registerHelper('printArray', function() {
    //Last argument is the options object.
    var options = arguments[arguments.length - 1];

    //Skip the last argument.
    for(var i = 0; i < arguments.length - 1; ++i) {
        //Do your thing with each array element.
    }

    //Return your results...
    return '';
});
8
répondu AaronSieb 2014-12-16 03:21:29

Vous pouvez presque réaliser cela avec l'utilisation de eval(), l'utilisation d'une aide comme ceci:

Handlebars.registerHelper('printArray', function(values) {
   var array = eval(values);

   if (array.constructor === Array()) {
     ...
   }
}

ci-dessus vous permet d'appeler cela du template:

{{printArray '[0, 1, 2]'}}

la seule réserve à cette méthode est que vous devez passer votre tableau comme une chaîne.

3
répondu Ian Westerfield 2015-09-21 16:58:07

avez-vous essayé de passer juste la valeur entre crochets du tableau?

{{printArray [1, 3, 4]}}

je sais que vous pouvez facilement passer dans les objets, comme arguments le guidon, méthodes d'aide:

{{printArray {arr: [1, 3, 4]} }}

jetez un coup d'oeil à ces méthodes d'aide impressionnantes, la plupart que j'ai volé ailleurs, dont quelques-unes que j'ai écrites ou retouchées... Ils sont mon point de départ de référence sur le sujet:

https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js

1
répondu zeroasterisk 2013-05-28 05:21:23

Vous pouvez définir un helper tableau comme ci-dessous.

Handlebars.registerHelper('array', function() {
    return Array.prototype.slice.call(arguments, 0, -1);
}

{{printArray (array 1 3 4)}}
1
répondu SmallTitan 2017-05-24 03:50:59