2012-01-30 84 views
7

渲染一个小胡子局部多次我有要通过侧渲染侧两个对象。我永远不会想要渲染更多,或者少于两个。我的模型是建立像这样:具有不同数据

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

使用小胡子的模板,我想用相同的部分,从而使得各对象:

<div> 
    <h1>Object 1</h1> 
    {{>objPartial}} 
</div> 
<div> 
    <h1>Object 2</h1> 
    {{>objPartial}} 
</div> 

然而,胡子似乎并不支持传递上下文到部分。做类似{{>objPartial obj1}}似乎应该支持,但我找不到有关为部分设置上下文的任何文档。

是否支持这样的事情?如果不是,我怎样才能达到相同的效果,而不复制部分(objPartial1objPartial2)?

回答

9

我觉得你的语法所追求的是不是{{>objPartial obj1}},而应该是

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

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

我分叉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/

+0

虽然我因为这个问题继续前行,这个答案确实是正确的。谢谢Doug Fish! – mikefrey 2012-09-01 22:31:11

1

你可以调整你的模型包括h1div所以你可以循环每个时间

<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> 
发送不同的数据 objPartial列表

See it on jsFiddle