2013-06-28 5 views
23

क्या हैंडलबर्स.जेएस टेम्पलेट में रूट संदर्भ तक पहुंचने के लिए कोई अंतर्निहित विधि है? अधिकांश सहायक एक नेस्टेड संदर्भ जोड़ रहे हैं और आपको इसे संदर्भित करने के लिए उस संदर्भ में चर से पहले ../ लिखना है, लेकिन यह बहुत व्यावहारिक नहीं है यदि आपके पास बहुत सारे हैं, ifs, आदिहैंडलबार.जेएस टेम्पलेट में रूट संदर्भ तक पहुंच

उत्तर

42

उपयोग @root के लिए

<!-- app/assets/javascript/templates/my_content.hbs --> 
<table class="table"> 
    <tbody> 

    {{#each view.data.items}} 
    <tr> 
     <td>{{@key}}</td> 
     <td> 
     Hello from {{../view.registryName}} 
     </td> 
    </tr> 
    {{/each}} 
    </tbody> 
</table> 

जांच http://handlebarsjs.com/#paths: प्रत्येक) more info

लेकिन वहाँ के साथ '../'

# app/assets/javascript/contents.coffee 
body = HandlebarsTemplates['my_hbs_template']({ 
    view:{ 
    registryName: 'foo', 
    data: {items: {x: 'x'}} 
    } 
    }) 

टेम्पलेट पिछले संदर्भ का उपयोग करने की संभावना है। यह हैंडलबार्स-v2.0.0.js

{{@root.somthing.nested_somthing}} 
+1

आप 'if' और' प्रत्येक' ब्लॉक में @root का भी उपयोग कर सकते हैं, उदा। '{{#each @ root.somthing.nested_somthing}}' – user393274

+0

संस्करण को इंगित करने के लिए धन्यवाद, जहां इसे पेश किया गया था। हम तब तक असफल रहे जब तक हमें एहसास हुआ कि हम हैंडलबार्स-v.1.3.0.js के साथ काम कर रहे थे –

0

जैसा नहीं अभी तक!

यह कई बार सुझाव दिया गया है और वहाँ एक खुला टिकट है: https://github.com/wycats/handlebars.js/issues/392

उनका तर्क है कि यह आवश्यक नहीं है लेकिन अगर यह कोई प्रत्यक्ष प्रदर्शन भूमि के ऊपर के साथ एक सस्ते ठीक है मैं क्यों नहीं दिख रहा है इसे शामिल नहीं किया जा सकता है।

2

हाँ, मैं बनाया है एक http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

देख मूलतः, यह सहायक और बिंगो {{xRoot}} शीर्ष पर ले जाएगा जोड़ने ...

मैं हमेशा की तरह हैंडल में मेरी JSON डेटा पारित इस:

{ data: self.data } 

इस प्रकार हमेशा नीचे कोड रिटर्न "डाटा" जब यह xRoot टैग देखता है और मुझे शीर्ष

Handlebars.JavaScriptCompiler.prototype.nameLookup = function (parent, name, type) { 

    if (name.indexOf("xRoot") === 0) { 
     return "data"; 
    } 

    if (/^[0-9]+$/.test(name)) { 
     return parent + "[" + name + "]"; 
    } else if (Handlebars.JavaScriptCompiler.isValidJavaScriptVariableName(name)) { 
     return parent + "." + name; 
    } 
    else { 
     return parent + "['" + name + "']"; 
    } 
}; 
पर ले जाता है
6

लूपिंग के साथ संदर्भ को बदलने के बाद टेम्पलेट के रूट संदर्भ तक पहुंचने की कोई संभावना नहीं है (उदा। अधिक जानकारी के

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