2012-12-22 13 views
5

मैं कभी-कभी खुद को एक ही डेटा को कई टेम्पलेट्स में घोषित करता हूं। उदाहरण के लिए:क्या आप कई टेम्पलेट्स में डेटा साझा कर सकते हैं?

Template.auction_page.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return [ 30, 60, 120 ]; 
}; 

मैं इसे बेहतर एक वैश्विक का उपयोग करके कर सकते हैं:

Template.auction_page.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

Template.auction_editor.auctionDurations = function() { 
    return global.auctionDurations; 
}; 

लेकिन वहाँ किसी भी तरह से घोषणाओं को पूरी तरह से छुटकारा पाने के लिए है? दूसरे शब्दों में, क्या डिफ़ॉल्ट रूप से कुछ वैश्विक डेटा को कई टेम्पलेट्स में साझा करने का कोई तरीका है?

उत्तर

5

एक अच्छा समाधान मिला (एक सहायक की मदद से!)।

आपका वैश्विक:

global = _.extend({}, { 
    regions: [ "Americas", "Europe", "Asia" ] 
} 

सहायक:

Handlebars.registerHelper("global", function(name) { 
    return global[name]; 
}); 

अब आपके सभी टेम्पलेट्स यह का उपयोग कर सकते:

<select> 
    {{#each global "regions"}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 
1

आप इस के लिए Session उपयोग कर सकते हैं:

Template.auction_page.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 
    Template.auction_editor.auctionDurations = function() { 
    return Session.get("auctionDurations"); 
    } 

सत्र का उपयोग करने का एक अच्छा बोनस है कि, यह एक प्रतिक्रियाशील डेटा स्रोत है, क्योंकि, की स्थापना यह सब टेम्पलेट्स है कि यह इस पर निर्भर फिर से प्रदान करने की कारण होगा। इसलिए आपकी नीलामी अवधि अपडेट हो जाएगी जैसे ही आप Session.set("auctionDurations", [ 30, 60, 120 ]);

+0

श्रीमान, लेकिन आप गलत समझा। मैं इन असाइनमेंट घोषणाओं से पूरी तरह से छुटकारा पाना चाहता था। – Dave

2

एक सहायक समारोह के उपयोग के एक बहुत है अच्छा सामान्य उद्देश्य समाधान। पूर्णता के लिए, आप एक साधारण असाइनमेंट भी कर सकते हैं:

Template.auction_page.auctionDurations = Template.auction_editor.auctionDurations; 
+0

आह हाँ, यह भी एक अच्छा शॉर्टकट हो सकता है। मुझे लगता है कि यह लोडिंग ऑर्डर के आधार पर काम कर सकता है या नहीं भी। लेकिन मेरे कुछ मौजूदा कोड पर एक नज़र से पता चलता है कि लोडिंग ऑर्डर इस मामले में कोई फर्क नहीं पड़ता। क्या मुझसे कोई चूक हो रही है? – Dave

+0

लोडिंग ऑर्डर दो कारणों से नहीं बदलेगा: 1) आप स्पष्ट रूप से ऑर्डर देने के बावजूद मूल्य प्राप्त कर रहे हैं, 2) इस मामले में विशेष रूप से, मान स्थैतिक हैं (हालांकि यह मेरे लिए गतिशील संग्रह के साथ भी काम करता है)। –