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?
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}}
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 '';
});
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.
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
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)}}