使用不同的数据多次渲染一个胡须模板部分

9

我有两个对象想要并排渲染。我永远不会需要渲染更多或者少于两个对象。我的模型设置如下:

{
  obj1: {...},
  obj2: {...}
}

使用mustache模板,我想使用相同的部分来渲染每个对象:
<div>
  <h1>Object 1</h1>
  {{>objPartial}}
</div>
<div>
  <h1>Object 2</h1>
  {{>objPartial}}
</div>

然而,Mustache似乎不支持将上下文传递给partial。像这样做 {{>objPartial obj1}} 似乎应该是被支持的,但我找不到任何有关设置partial上下文的文档。
这种情况是否被支持?如果不支持,如何在不重复使用partial(objPartial1objPartial2)的情况下实现相同的效果?
2个回答

12

我认为你要查找的语法不是 {{>objPartial obj1}},而应该是

{{#obj1}}
{{>objPartial}}
{{/obj1}}

{{#}} 的语法不仅适用于数组 - 对于非数组对象,该对象将成为当前作用域的一部分。

我已经fork了maxbeatty的示例,并对其进行了修改以展示此语法:

<script type="template/text" id="partial">
    <ul>
        {{#name}}
        <li>{{.}}</li>
        {{/name}}
    </ul>
</script>

<script type="template/text" id="main">
    <div>
        <h1>Stooges</h1>
        {{#object1}}
        {{>objPartial}}
        {{/object1}}
    </div>
    <div>
        <h1>Musketeers</h1>
        {{#object2}}
        {{>objPartial}}
        {{/object2}}
    </div>
</script><script type="text/javascript">    
    var partial = $('#partial').html(),
        main = $('#main').html(),
        data = {

            object1: {
                name: ["Curly", "Moe", "Larry"]},
            object2: {
                name: ["Athos", "Porthos", "Aramis", "D'Artagnan"]}

        },
        html = Mustache.to_html(main,data, {
            "objPartial": partial
        });
    document.write(html);
</script>

链接到 jsfiddle:http://jsfiddle.net/YW5zF/3/


虽然我已经解决了这个问题,但这个答案确实是正确的。谢谢Doug Fish! - mikefrey

2
您可以调整您的模型,包括 h1div,这样您就可以循环遍历列表,每次发送不同的数据到 objPartial
<script type="template/text" id="partial">
    <ul>
        {{#name}}
        <li>{{.}}</li>
        {{/name}}
    </ul>
</script>

<script type="template/text" id="main">
    {{#section}}
    <div>
        <h1>{{title}}</h1>
        {{>objPartial}}
    </div>
    {{/section}}
</script>

<script type="text/javascript">
var partial = $('#partial').html(),
    main = $('#main').html(),
    data = {
        section: [
            {
            title: "Object 1",
            name: ["Curly", "Moe", "Larry"]},
        {
            title: "Object 2",
            name: ["Athos", "Porthos", "Aramis", "D'Artagnan"]}
        ]
    },
    html = Mustache.to_html(main,data, {
        "objPartial": partial
    });
document.write(html);
</script>

在 jsFiddle 上查看


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接