एक हैंडल 'प्रत्येक' लूप के साथ माता-पिता की पहुंच गुण


204

निम्नलिखित सरलीकृत आंकड़ों पर विचार करें:

var viewData = {
    itemSize: 20,
    items: [
        'Zimbabwe', 'dog', 'falafel'
    ]
};

और एक हैंडलबार टेम्पलेट:

{{#each items}}
    <div style="font-size:{{itemSize}}px">{{this}}</div>
{{/each}}

यह काम नहीं करेगा क्योंकि eachलूप के भीतर , पैरेंट स्कोप सुलभ नहीं है - कम से कम किसी भी तरह से नहीं जो मैंने कोशिश की है। मैं उम्मीद कर रहा हूँ कि हालांकि यह करने का एक तरीका है!

जवाबों:


423

इसे प्राप्त करने के दो वैध तरीके हैं।

माता-पिता के दायरे के साथ हस्तक्षेप करें ../

../प्रॉपर्टी के नाम से जुड़कर , आप पेरेंट स्कोप को रेफर कर सकते हैं।

{{#each items}}
    <div style="font-size:{{../itemSize}}px">{{this}}</div>
    {{#if this.items.someKey}}
       <div style="font-size:{{../../itemSize}}px">{{this}}</div>  
    {{/if}}
{{/each}}

आप दोहराव के माध्यम से कई स्तरों तक जा सकते हैं ../। उदाहरण के लिए, दो स्तरों का उपयोग करने के लिए ../../key

अधिक जानकारी के लिए, रास्तों पर हैंडलबार्स प्रलेखन देखें ।

के साथ रूट स्कोप को घटाएं @root

@rootसंपत्ति पथ के लिए तैयार होने से, आप सबसे ऊपरी क्षेत्र से नीचे की ओर नेविगेट कर सकते हैं (जैसा कि कैबलरॉग के उत्तर में दिखाया गया है )।

अधिक जानकारी के लिए, @data वैरिएबल पर हैंडलबार्स प्रलेखन देखें ।


101
मूल गुणों को प्राप्त करने के लिए बस ../ का उपयोग करने पर एक नोट। यदि आपके पास नेस्टेड # एफ़ के साथ प्रत्येक स्टेटमेंट है तो बस कर रहे हैं .. / केवल आपको # सीक के स्तर तक ले जाता है। तो आपको करना होगा ../../itemize करने के लिए माता-पिता के पास वापस #each
TheStoneFox

1
मूंछों के टेंपलेटिंग इंजन में मुझे यह कार्यक्षमता कैसे मिल सकती है?
ब्लशर्ट

2
@blushrt आप नहीं। यह हैंडलबर्स विशिष्ट है
19h

3
@ TheTaxPayer ने अभी-अभी आपने मुझे भारी मात्रा में सिरदर्द से बचाया है! रॉक ऑन योर सॉक्स :)
पीटर पी।

4
एक सहायक में एक ऊपरी स्तर #each मान पारित करने के बारे में क्या है
ओलेग

60

नई विधि डॉट नोटेशन का उपयोग कर रही है, स्लैश नोटेशन को हटा दिया गया है ( http://handlebarsjs.com/express.html )।

तो, माता-पिता के तत्वों तक पहुंचने की वास्तविक विधि निम्नलिखित हैं:

@root.grandfather.father.element
@root.father.element

अपने विशिष्ट उदाहरण में, आप उपयोग करेंगे:

{{#each items}}
 <div style="font-size:{{@root.viewData.itemSize}}px">{{this}}</div>
{{/each}}

आधिकारिक प्रलेखन ( http://handlebarsjs.com/builtin_helpers.html ) से एक अन्य विधि उपनाम का उपयोग कर रही है

प्रत्येक सहायक ब्लॉक पैरामीटर का भी समर्थन करता है, ब्लॉक में कहीं भी नामित संदर्भों की अनुमति देता है।

{{#each array as |value key|}}  
 {{#each child as |childValue childKey|}}
     {{key}} - {{childKey}}. {{childValue}}   
 {{/each}} 
{{/each}} 

एक कुंजी और मान वैरिएबल बनाएगा जो बच्चे गहन चर संदर्भों की आवश्यकता के बिना एक्सेस कर सकते हैं। ऊपर दिए गए उदाहरण में, {{कुंजी}}> {{@ .. / कुंजी}} के समान है, लेकिन कई मामलों में अधिक पठनीय है।


1
मेरे लिए एक स्तर ऊपर जाकर "@ root.itemSize" का उपयोग कर काम किया।
सैम टायसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.