Con el consejo "mu es demasiado corto". Y algunas ideas locas, se me ocurrió un enfoque interesante para la creación de plantillas complejas. * ¡Casi funciona!
Digamos que tengo este contenido (o datos o vista) que quiero poner en una plantilla:
var content = {
title: "Black Book",
girls: ["blonde", "brunette", "redhead"],
digits: ['123', '456', '789'],
calc: function() {
return 2 + 4;
}
};
Y tengo una plantilla como esta:
<script type="text/template" id="template">
<h1>{{title}}</h1>
<h3>{{calc}}</h3>
<ul>
<li><a href="{{digits}}">{{hair}}</a></li>
</ul>
</script>
Y el resultado final que quiero es éste:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
<li><a href="123">blonde</a></li>
<li><a href="456">brunette</a></li>
<li><a href="789">redhead</a></li>
</ul>
El problema que encontraremos es que tenemos matrices (o listas) anidados en nuestra contenido original, y si intentáramos con Mustache.render (html, content) terminaríamos con solo un elemento li o una matriz completa dentro de un atributo href = "". Tan triste ...
Así que él es el enfoque, pasar a través de la plantilla varias veces. La primera vez, pase y reemplace los elementos de nivel superior, y ajuste la plantilla para el siguiente pase. La segunda vez, ajuste una de las listas, y ajuste la plantilla para la tercera pasada, etc., para ver cuántas capas de contenido tiene. Aquí está la nueva plantilla de partida:
<script type="text/template" id="template">
<h1>{{title}}</h1>
<h3>{{calc}}</h3>
<ul>
{{#hair}}
{{#digits}}
<li><a href="{{digits}}">{{hair}}</a></li>
{{/digits}}
{{/hair}}
</ul>
</script>
En la primera pasada a través de rellenar el material de primer nivel, y el cambio dígitos {{}} {{a.}}
$.each(content, function (index, value) {
template2 = template.replace(/{{title}}/ig, content.title)
.replace(/{{calc}}/ig, content.calc)
.replace(/{{digits}}/ig, '{{.}}');
});
Ahora usted tiene esto:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
{{#hair}}
{{#digits}}
<li><a href="{{.}}">{{hair}}</a></li>
{{/digits}}
{{/hair}}
</ul>
En el paso siguiente a través sólo tendremos que llamamos Mustache.render (Template2, content.digits); y eso debería darnos:
<h1>Black Book</h1>
<h3>6</h3>
<ul>
{{#hair}}
<li><a href="123">{{hair}}</a></li>
<li><a href="456">{{hair}}</a></li>
<li><a href="789">{{hair}}</a></li>
{{/hair}}
</ul>
Y ahí es donde mi lógica muere, jaja. ¡Cualquier ayuda pensando en esto sería rockero! Estoy pensando en sacar los elementos del bloque {{hair}} y hacer un pase de $ .each a través de content.girls y stack .replace tres veces. O podría intentar comenzar con el nivel más bajo de contenido y subir de nivel. No se.
Todo esto, básicamente, me hace preguntarme si hay alguna manera "lógica" para que este tipo de anidación o múltiples pasadas se pongan en el bigote, ¿lo hacen las barras del manillar?
¡Eso es útil! Cada ejemplo que veo en nettuts o en cualquier lugar que demuestre la creación de plantillas itera a través de una cosa. La única otra solución que podía pensar, pero que no pude implementar bien, fue anidar una segunda plantilla. – Costa
Tomó su consejo sobre la reorganización de algunos de los datos, pero intenté algo más también. Repasé varias veces la plantilla, reemplazando ciertas cosas la primera vez por otras cosas la segunda vez. Esa parecía ser una buena estrategia. Si alguien está interesado, hágamelo saber, lo publicaré. – Costa
@Costa: puede responder sus propias preguntas y tengo curiosidad acerca de lo que se le ocurrió. –