2015-01-15 2 views
5

उल्का में, मैं एक टेम्पलेट के लिए अपने डाटाबेस से दो वस्तुओं भेज रहा:प्रवेश उल्का ईवेंट हैंडलर में टेम्पलेट सहायक शब्दकोश

Template.myTemplate.helpers({ 
    helper1: function() { 
    var object1 = this; // data context set in iron:router...path is context dependent 
    // modify some values in object1 
    return this; 
    }, 
    helper2: function() { 
    return Collection2.find({_id: this.object2_id}); 
    } 
}); 

इस टेम्पलेट भी ऊपर दो वस्तुओं को संशोधित करने के लिए एक ईवेंट हैंडलर है। मैं ऊपर से हेल्पर 1 और हेल्पर 2 तक पहुंचने का प्रयास कर रहा हूं, लेकिन यदि मैं टेम्पलेट के डेटा संदर्भ को कॉल करता हूं, तो मुझे केवल ऑब्जेक्ट 1 के असम्बद्ध संस्करण तक पहुंच प्राप्त होती है। मैं ऊपर परिभाषित सहायकों का उपयोग कैसे करूं?

Template.myTemplate.events({ 
    'submit form': function(event) { 
    event.preventDefault(); 
    // Access helper2 object and attributes here instead of calling Collection2.find() again 
    } 
}); 
+2

कोई रास्ता नहीं वर्तमान सार्वजनिक एपीआई के साथ सहायकों कॉल करने के लिए वहाँ है एक 2 रास्ता डेटा है की जाँच कर सकते हैं। –

+1

पेप्पे, आपको यह पता हो सकता है, लेकिन मुझे पता चला कि हेल्पर्स तक पहुंचने के लिए एक आंतरिक एपीआई है - टेम्पलेट.मी टेम्पलेट .__ helpers.get ('सहायक'); – bgmaster

+0

यह देखते हुए कि यह आंतरिक है, मुझे लगता है कि भविष्य में एपीआई बदल सकता है, इस प्रकार यह अक्सर आपके कोड में इसका उपयोग करने का सबसे अच्छा विचार नहीं हो सकता है। – bgmaster

उत्तर

4

सहायकों सिर्फ कार्य हैं और इस तरह चारों ओर से पारित कर दिया है और होगा पर अन्य चर को सौंपा जा सकता है, तो आप एक समारोह निर्धारित कर सकते हैं और फिर इसे टेम्पलेट सहायकों की helper2 कुंजी असाइन और फोन से मूल संदर्भ है द्वारा आयोजन प्रबंधकर्ता।

var helperFunction = function() { 
    return Collection2.find({_id: this.object2_id}); 
}; 

Template.myTemplate.helpers({ 
    helper1: function() { 
     var object1 = this; // data context set in iron:router...path is context dependent 
     // modify some values in object1 
     return this; 
    }, 
    helper2: helperFunction 
}); 

Template.myTemplate.events({ 
    'submit form': function(event) { 
     event.preventDefault(); 
     var cursor = helperFunction(); 
    } 
}); 
+0

धन्यवाद नीचे मेरा उत्तर देखें। यह पैटर्न दोहराने वाले कोड से बचने में थोड़ा सा मदद करता है, जिसे मैं करना चाहता था। एकमात्र चीज जो मैं नोट करूंगा वह यह है कि फ़ंक्शन में यह बदल सकता है। जब आप ईवेंट हैंडलर में फ़ंक्शन को कॉल करते हैं, तो यह डेटा संदर्भ के बजाय विंडो ऑब्जेक्ट बन जाता है। मुझे घटना में हैंडलर अभी भी डेटा संदर्भ में इस पर विचार करने में यह अजीब लगता है। यदि आप इसे प्रतिबिंबित करने के लिए अपना उत्तर अपडेट कर सकते हैं, तो मैं इसे सही के रूप में चिह्नित करूंगा। – bgmaster

+0

जैसा कि @bgmaster ने नोट किया है, आपको [कॉल विधि] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) को कॉल करने और 'thisArg' प्रदान करने की आवश्यकता है बस फ़ंक्शन को कॉल करने के बजाय। हालांकि, घटना में, आपको नहीं पता कि 'यहआआर' क्या होना चाहिए (और यह अलग-अलग समय हो सकता है' {{helper2}} 'का उपयोग किया गया है, इसलिए यह सामान्य रूप से काम नहीं करता है)। –

0

आप घटनाओं से सहायकों को संशोधित कर सकते हैं, तो, उल्का आवेदन के किसी भी भाग जो ब्लेज़ के डिजाइन दर्शन के खिलाफ है क्या कर सकते हैं!

ब्लेज़ को यूनी-दिशात्मक डेटा बाध्यकारी प्रलोभन प्रणाली के रूप में डिज़ाइन किया गया है। जो आप पूछते हैं उसके लिए एंगुलर (स्वयं का इस्तेमाल किया जाता है, या ब्लेज़ के साथ-साथ, THIS पर) का उपयोग करके हासिल किया जा सकता है, जो प्रकृति द्वारा 2-तरफा डेटा बाध्यकारी प्रलोभन प्रणाली है।

तुम भी प्रतिक्रिया है, जो भी बाध्यकारी

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