2011-09-12 12 views
5

Spójrz na to JSON przez sekundę. Tak, jest zagnieżdżony jak diabli. I muszę go zagnieżdżać, aby zachować hierarchię danych.Szablony jquery - zagnieżdżone JSON (unikalne nazwy klawiszy)

JSON from firebug console

Moim problemem jest to, że klucze nie są generyczne (ze względu na klawisze C# słownik nie może być taka sama). Różnią się one w zależności od danych. Mój szablon wygląda to tak daleko:

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

Jak widać, chcę otworzyć json ciągu $data. Wartość $data zawiera JSON, ale nie znam składni, aby uzyskać dostęp do tego .. i wewnątrz każdej wartości jest również JSON.

Jak mogę to zrobić?

Uwaga:

To jest mój kod jQuery:

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

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

+0

Wystarczy FYI, nie jest to JSON, to obiekt JavaScript. JSON to format serializacji. Możesz go otrzymać z serwera jako JSON, ale kiedy go sparsujesz, to tylko Obiekt. – orip

+0

tak OK ... Mam JSON (string) z wywołania ajax, które wykonuję wcześniej. Które odbywa się tak: 'var jsonobject = $ .parseJSON (response);'. Myślisz, że powinienem użyć json (nie obiektu javascript)? – KristianB

+0

nie, tylko kwestia terminologii – orip

Odpowiedz

8

Można użyć składni takiego: {{each(index, value) array}} mieć jasne wyobrażenie o index/wartości co zapętlasz. {{each}} może również iterować po właściwościach obiektu.

Więc jeśli miał dane tak:

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

Można napisać szablon takiego:

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

próbkę tutaj: http://jsfiddle.net/rniemeyer/8PLGP/

+0

Dokładnie to, czego potrzebowałem ... Dzięki! – KristianB

+0

To jest niesamowite! Świetna robota –