2011-09-12 20 views
5

Bu JSON'a bir saniye göz at. Evet, cehennem gibi yuvalanmış. Veri hiyerarşisini korumak için iç içe olmalıyım.JQuery şablonları - iç içe JSON (benzersiz anahtar isimler)

JSON from firebug console

Sorunum tuşları (aynı olamaz nedeniyle C# Sözlük anahtarlarına) jenerik olmaması. Verilere bağlı olarak değişir. Benim şablon bugüne kadar şuna benzer:

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

Gördüğünüz gibi, ben $data içinde json erişmek istiyorum. $data 's değeri JSON içerir, ancak ben bunu erişmek için sözdizimi bilmiyorum .. ve her $data' s değeri var da JSON var.

Bunu nasıl yapabilirim?

Not: indeksi/değer hakkında net bir fikir olması {{each(index, value) array}}:

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

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

+0

, bu değil JSON, bu bir JavaScript Nesnesi. JSON bir serileştirme biçimidir. Sunucudan JSON olarak alabilirsiniz, ancak ayrıştırdıktan sonra sadece bir Nesne. – orip

+0

Evet tamam ... Bundan önce yaptığım ajax çağrısından JSON (string) var. Hangisi böyle yapılır? Var jsonobject = $ .parseJSON (response); '. Json'u kullanmam gerektiğini düşünüyorsun (javascript nesnesini değil)? – KristianB

+0

Hayır, sadece bir terminoloji sorunu – orip

cevap

8

Böyle bir sözdizimi kullanabilirsiniz: Bu benim jQuery kodu

olduğunu

ne yapıyorsun? {{each}}, bir nesnedeki özelliklerle de yineleyebilir. Bu gibi verileri olsaydı

Yani, burayı

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

Numune:

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

Bir böyle şablonu yazabilirsiniz Bilginize http://jsfiddle.net/rniemeyer/8PLGP/

+0

Tam olarak neye ihtiyacım vardı ... Teşekkürler! – KristianB

+0

Bu harika! Harika iş –