2011-09-12 19 views
5

एक सेकंड के लिए इस JSON को नज़रअंदाज़ करें। हाँ, यह नरक की तरह घोंसला है। और मुझे डेटा पदानुक्रम रखने के लिए घोंसला रखने की आवश्यकता है।Jquery टेम्पलेट्स - नेस्टेड JSON (अद्वितीय कुंजी-नाम)

JSON from firebug console

मेरे समस्या यह है कि कुंजी नहीं जेनेरिक (सी # शब्दकोश कुंजी की वजह से ही नहीं हो सकता है) कर रहे हैं। वे डेटा के आधार पर भिन्न होते हैं। मेरे टेम्पलेट अब तक इस तरह दिखता है:

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

जैसा कि आप देख, मैं $data भीतर json का उपयोग करना चाहते हैं। $data के मान में JSON है, लेकिन मुझे उस तक पहुंचने के लिए वाक्यविन्यास नहीं पता .. और प्रत्येक $data के मान के अंदर भी JSON है।

मैं यह कैसे कर सकता हूं?

नोट: के सूचकांक/मूल्य का एक स्पष्ट विचार है करने के लिए {{each(index, value) array}}:

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

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

+0

, यह एक नहीं है JSON, यह एक जावास्क्रिप्ट ऑब्जेक्ट है। जेएसओएन एक क्रमबद्ध प्रारूप है। आप इसे JSON के रूप में सर्वर से प्राप्त कर सकते हैं, लेकिन एक बार जब आप इसे पार्स कर लेते हैं तो यह केवल एक ऑब्जेक्ट है। – orip

+0

हाँ ठीक है ... मेरे पास AJAX कॉल से JSON (स्ट्रिंग) है जो मैंने इससे पहले किया था। जो इस 'var jsonobject = $ .parseJSON (प्रतिक्रिया) की तरह किया जाता है; '। आपको लगता है कि मुझे जेसन (जावास्क्रिप्ट ऑब्जेक्ट नहीं) का उपयोग करना चाहिए? – KristianB

+0

नहीं, केवल एक शब्दावली समस्या – orip

उत्तर

8

आप इस प्रकार का वाक्य विन्यास का उपयोग कर सकते हैं:

यह मेरा jQuery कोड है आप क्या लूप कर रहे हैं। {{each}} किसी ऑब्जेक्ट पर गुणों के माध्यम से भी पुनरावृत्त हो सकता है।

तो, अगर आप इस तरह डेटा था:

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

यहाँ नमूना::

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

आप इस प्रकार का टेम्पलेट लिख सकता है http://jsfiddle.net/rniemeyer/8PLGP/

बस FYI
+0

बिल्कुल मुझे क्या चाहिए ... धन्यवाद! – KristianB

+0

यह आश्चर्यजनक है! अच्छा कार्य –

संबंधित मुद्दे