2012-08-09 24 views
7

Duplicar posibles:
Mustache JS Template with JSON CollectionMustache.js: iterar sobre una lista recibida a través de JSON

tengo una respuesta JSON como este que quiero usar con Mustache.js:

[ 
    {"id": "1", "details": {"name": "X", "type":"Y" }}, 
    {"id": "2", "details": {"name": "aName", "type":"something" }} 
] 

¿Cómo puedo iterar sobre esto usando mustache.js?

+0

No veo cómo es un duplicado. Ni el título de la pregunta vinculada es descriptivo, ni hay una respuesta aceptada. – Stealth

+0

Lo curioso es que la publicación que se trata de "un duplicado de" hace referencia a esta pregunta. – Carcigenicate

Respuesta

12

he encontrado otra manera de hacer esto que es bastante similar a Geert-Jan excepto que usted no tiene que asignar la matriz a un objeto JavaScript.

{{ #. }} 
    <p> {{ id }} </p> 
    <ul> {{#details}} 
     {{name }} 
     {{ type }} 
    {{/details}} 
    </ul> 
{{ /. }} 
+0

sí, sí. Tampoco sabía que el punto funcionaba en un objeto de nivel superior. –

+0

Parece que no puedo hacer que esto funcione con I Can Haz. ¿Se me escapa algo? – streetlight

+0

Parece que no puedo hacer que esto funcione (estoy usando I Can Haz). ¿Hay algo que me falta, porque sería increíble? – streetlight

14

La propia matriz debe ser un valor en un objeto grande, así:

var obj = { 
    arr: [ 
    {"id": "1", "details": {"name": "X", "type":"Y" }}, 
    {"id": "2", "details": {"name": "aName", "type":"something" }} 
    ] 
} 

A continuación, puede hacer:

{{#arr}} 
    my id: {{id}} 
{{/arr}} 

el uso de {{}} #bla es en realidad sobrecargado . Cuando la propiedad sobre la que actúa es una matriz, se repetirá. Cuando la propiedad es un objeto en sí, 'ingresará' ese objeto. Dada su ejemplo:

{{#arr}} 
    my id: {{id}} <br/> 
    {{#details}} 
    and my name: {{name}} 
    {{/details}} 
{{/arr}} 
+2

Gracias por su respuesta. También encontré otra forma de hacerlo que también puede ser más fácil. Por favor ver más abajo. – Stealth

+0

@ Geert-Jan gracias, me ayudó. Tuve que hacer esto: '$ ('. Some #selector'). Append (Mustache.render (someTemplateTpl, {arrayOfObjects: classObject.arrayOfJsons});' para que una matriz de objetos llamada _arrayOfJsons_ dentro de la clase _classObject_ tuviera que se asignará como un valor de la propiedad _arrayOfObjects_ dentro del objeto. Pero antes, cuando usé este código: '$ ('. Some #selector'). Append (Mustache.render (someTemplateTpl, classObject.arrayOfJsons));' no funcionó, la plantilla se ha procesado parcialmente - solo las partes estáticas de html, pero las dinámicas basadas en las propiedades de Json (es decir, if-else como enunciados) no lo eran. ¿Por qué? – spaffy

Cuestiones relacionadas