111 votes

Mustache peut-il itérer un tableau de niveau supérieur ?

Mon objet ressemble à ceci :

['foo','bar','baz']

Et je veux utiliser un modèle de moustache pour en produire quelque chose comme ceci :

"<ul><li>foo</li><li>bar</li><li>baz</li></ul>"

Mais comment ? Dois-je vraiment le transformer en quelque chose comme ça d'abord ?

{list:['foo','bar','baz']}

172voto

danjordan Points 994

Vous pouvez le faire comme ça...

Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']);

Ça marche aussi pour des choses comme ça...

var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);

2 votes

En fait, le modèle vient en premier : Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo'‌​,'bar','baz']);

0 votes

Comment puis-je obtenir, par exemple, le deuxième élément du tableau ? J'essaie de faire {{.1}} avec mustache.js et ça ne marche pas.

0 votes

NM, j'ai trouvé : on peut ignorer les points : donc {{1}} ou si on veut faire une vérification logique, alors {{#1}} ou {{/1}}.

120voto

Andy Hull Points 723

J'ai eu le même problème ce matin et après un peu d'expérimentation, j'ai découvert que vous pouvez utiliser le {{.}} pour faire référence à l'élément courant d'un tableau :

<ul>
  {{#yourList}}
  <li>{{.}}</li>
  {{/yourList}}
</ul>

1 votes

D'où vient le nom de la variable #yourList ? Pouvez-vous montrer un échantillon javascript du rendu actuel ?

3 votes

Vous n'avez même pas besoin d'utiliser "votreListe", vous pouvez simplement utiliser "." ici aussi : Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo'‌​,'bar','baz']);

0 votes

Le JavaScript serait Mustache.render('<ul>{{#.}}{{.}}{{/.}}</ul>', {yourList: ['foo','bar','baz']});

5voto

Kai Carver Points 605

En se basant sur la réponse de @danjordan, ceci fera ce que vous voulez :

Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);

retour :

<ul><li>foo</li><li>bar</li><li>baz</li></ul>

0 votes

Cela fonctionne uniquement pour les tableaux, pas pour les objets, impossible pour les {a:'foo',b:'bar',c:'baz'} ... Comment faire des références anonymes quand on itère sur des objets ?

2voto

Bhupender Keswani Points 143

Voici des exemples pour rendre un tableau multidimensionnel dans un modèle :

Exemple 1

'use strict';

var Mustache = require('mustache');

var view = {test: 'div content', multiple : ['foo', 'bar'], multiple_2 : ['hello', 'world']};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>{{.}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{.}}</li>{{/multiple_2}}</ul>';

var output = Mustache.render(template, view);

console.log(output);

Exemple 2

'use strict';

var Mustache = require('mustache');

var view = {test: 'div content', multiple : [{name: 'foo', gender: 'male'}, {name: 'bar', gender: 'female'}], multiple_2 : [{text: 'Hello', append: '**', prepend: '**'}, {text: 'World', append: '**', prepend: '**'}]};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>Hello my name is {{name}}. And I am {{gender}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{prepend}}_{{text}}_{{append}}</li>{{/multiple_2}}</ul>';

var output = Mustache.render(template, view);

console.log(output);

Pour le test, sauvegardez les exemples ci-dessus dans un fichier appelé 'test.js', exécutez la commande suivante dans la ligne de commande.

nodejs test.js

0voto

Shoaib Khalil Points 111

La solution la plus simple pour un tableau nommé Strengths :

{
   "ViewModel": 
    {
       "StrengthsItems": 
        {
           "Strengths": ["Dedicated", "Resourceful", "Professional", "Positive"]
        }
    }
}

fonctionne pour moi comme un charme est le suivant :

{{#ViewModel.StrengthsItems}}
    <p class="p4">{{Strengths}}</p>
{{/ViewModel.StrengthsItems}}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X