111

我的对象如下所示:

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

我想使用 mustache 模板从中生成如下内容:

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

但是怎么做?我真的必须先把它变成这样的东西吗?

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

6 回答 6

175

你可以这样做...

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

它也适用于这样的事情......

var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);
于 2012-04-04T15:15:55.327 回答
127

今天早上我遇到了同样的问题,经过一些实验后,我发现您可以使用 {{.}} 来引用数组的当前元素:

<ul>
  {{#yourList}}
  <li>{{.}}</li>
  {{/yourList}}
</ul>
于 2011-12-02T17:49:46.507 回答
5

以@danjordan 的回答为基础,这将满足您的要求:

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

返回:

<ul><li>foo</li><li>bar</li><li>baz</li></ul>
于 2012-05-04T12:11:56.933 回答
2

以下是在模板中呈现多维数组的示例:

示例 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);

示例 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);

对于测试运行,将上述示例保存在名为“test.js”的文件中,在命令行中运行以下命令

nodejs test.js
于 2017-11-08T08:47:28.597 回答
0

名为 的数组的最简单解决方案Strengths

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

像魅力一样为我工作如下:

{{#ViewModel.StrengthsItems}}
    <p class="p4">{{Strengths}}</p>
{{/ViewModel.StrengthsItems}}
于 2021-04-09T14:26:44.807 回答
-2

我不认为小胡子可以做到这一点!(令人惊讶)您可以遍历对象列表,然后访问每个对象的属性,但您似乎无法遍历简单的值列表!

因此,您必须将列表转换为:

[ {"value":"foo"},{"value":"bar"},{"value":"baz"} ] 

然后您的模板将是:

<ul>
  {{#the_list}}
  <li>{{value}}</li>
  {{/the_list}}
</ul>

对我来说,这似乎是 Mustache 的一个严重问题——任何模板系统都应该能够遍历简单值列表!

于 2011-08-22T15:11:24.230 回答