web-dev-qa-db-fra.com

Moustache peut-il parcourir 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 en arriver à quelque chose comme ça en premier?

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

Vous pouvez le faire comme ça ...

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

Cela fonctionne aussi pour des choses comme ça ...

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

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 actuel d'un tableau:

<ul>
  {{#yourList}}
  <li>{{.}}</li>
  {{/yourList}}
</ul>
109
Andy Hull

En vous appuyant sur la réponse de @ danjordan, vous obtiendrez ce que vous voulez:

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

rentrant:

<ul><li>foo</li><li>bar</li><li>baz</li></ul>
4
Kai Carver

Voici les 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, enregistrez les exemples ci-dessus dans le fichier nommé 'test.js', exécutez la commande suivante en ligne de commande

nodejs test.js
0