2012-01-30 16 views
7

Tengo dos objetos que quiero mostrar uno al lado del otro. Nunca hay un caso en el que desee renderizar más, o menos de dos. Mi modelo es la configuración de este modo:Renderizar un bigote parcial varias veces con datos diferentes

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

El uso de plantillas bigote, quiero representar cada objeto con el mismo elemento parcial:

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

Sin embargo, el bigote no parece que soportan el paso de un contexto a la parcial. Al hacer algo como {{>objPartial obj1}} parece que debería ser compatible, pero no puedo encontrar ninguna documentación sobre cómo establecer un contexto para un parcial.

¿Es compatible esta clase de cosas? De lo contrario, ¿cómo puedo lograr el mismo efecto sin duplicar el parcial (objPartial1 y objPartial2)?

Respuesta

9

La sintaxis que se considera que están buscando es no {{>objPartial obj1}}, sino que debe ser

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

La sintaxis para {{#}} no es solo para matrices: para objetos que no son de matriz, el objeto se vuelve parte del alcance actual.

He bifurcada ejemplo de maxbeatty y lo modificó para mostrar la siguiente sintaxis:

<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> 

Enlace a jsFiddle: http://jsfiddle.net/YW5zF/3/

+0

Aunque he movido desde entonces a partir de este número, esta respuesta es de hecho correcta. Gracias Doug Fish! – mikefrey

1

Se puede ajustar el modelo para incluir la h1 y div por lo que podría bucle sobre una lista que envía datos diferentes a objPartial cada vez

<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> 

See it on jsFiddle

Cuestiones relacionadas