2011-09-12 11 views
5

Mire este JSON durante un segundo. Sí, está anidado como el infierno. Y necesito que esté anidado para mantener la jerarquía de datos.Plantillas de Jquery - JSON anidado (nombres de clave únicos)

JSON from firebug console

Mi problema es que las llaves no son genéricos (debido a C# teclas diccionario no puede ser el mismo). Varían según los datos. Mi plantilla se parece a esto hasta ahora:

<script id="customerTemplate" type="text/x-jQuery-tmpl"> 
     {{each $data}} 
      <div class="Customer"> 
       <input class="CustomerId" type="hidden" value="${ $index }" /> 
       <div class="CustomerHeader"> 
        <div class="NameAndCheckbox"> 
         <input type="checkbox" checked="checked" class="CustomerCheckbox" /> 
         <span class="HeadlineText">${ $index }</span> 
        </div> 
       </div> 
       <div class="CustomerProjectWrapper"> 

        /* HOW TO ACCESS DATA WITHIN $data */ 
       </div> 
      </div> 
     {{/each}} 
    </script> 

Como se puede ver, quiero acceder a la JSON dentro $data. El valor de $data contiene JSON, pero no conozco la sintaxis para acceder a eso ... y dentro de cada valor de $data hay también JSON.

¿Cómo puedo hacer esto?

Nota:

Este es mi código de jQuery:

$.template("ctmpl", $("#customerTemplate"));

$.tmpl("ctmpl", jsonobject).appendTo("#CustomerContainer");

+0

Para su información, esta no es una JSON, es un objeto de JavaScript. JSON es un formato de serialización. Puede recibirlo del servidor como JSON, pero una vez que lo analiza, es solo un Objeto. – orip

+0

, sí, está bien ... Tengo JSON (cadena) de la llamada ajax que hago antes de esto. Que se hace así 'var jsonobject = $ .parseJSON (response);'. ¿Crees que debería usar el json (no el objeto javascript)? – KristianB

+0

no, solo un problema de terminología – orip

Respuesta

8

Se puede utilizar una sintaxis como esta: {{each(index, value) array}} tener una idea clara del índice/valor de en lo que estás bromeando {{each}} puede iterar a través de propiedades en un objeto también.

lo tanto, si tenemos los datos como este:

var data = { 
    testA: { 
     testA1: { 
      testA1A: "blahA1A", 
      testA1B: "blahA1B" 
     }, 
     testA2: { 
      testA2A: "blahA2A", 
      testA2B: "blahA2B" 
     } 
    }, 
    testB: { 
     testB1: { 
      testB1A: "blahB1A", 
      testB1B: "blahB1B" 
     }, 
     testB2: { 
      testB2A: "blahB2A", 
      testB2B: "blahB2B" 
     }, 
    } 
}; 

Se podría escribir una plantilla como esta:

<script id="contentTmpl" type="text/html"> 
    <ul> 
    {{each(i, item) $data}} 
     <li>${i}</li> 
     <ul> 
     {{each(j, subItem) item}} 
      <li>${j}</li>  
      <ul> 
      {{each(k, subSubItem) subItem}} 
       <li>${k} = ${subSubItem}</li> 
      {{/each}} 
      </ul> 
     {{/each}} 
     </ul> 
    {{/each}} 
    </ul> 
</script> 

Muestra aquí: http://jsfiddle.net/rniemeyer/8PLGP/

+0

Exactamente lo que necesitaba ... ¡Gracias! – KristianB

+0

¡Esto es asombroso! Buen trabajo –