2014-10-16 3 views
5

मेटीर 0.9.4 के रूप में, टेम्पलेट को परिभाषित करना। MyTemplateMyHelperFunction() अब मान्य नहीं है।टेम्पलेट के संदर्भ में किसी अन्य सहायक से एक सहायक को कॉल करना (उल्का 0.9.4)

हमने Template.someTemplate.myHelper = ... Template.someTemplate.helpers (...) के पक्ष में वाक्यविन्यास को हटा दिया। पुराने वाक्यविन्यास का उपयोग करना अभी भी काम करता है, लेकिन यह कंसोल को एक बहिष्करण चेतावनी प्रिंट करता है।

यह मेरे लिए ठीक लग रहा था, क्योंकि यह (कम से कम) कुछ गलत टाइपिंग और डुप्लिकेट टेक्स्ट को बचाएगा। हालांकि, मुझे जल्द ही पता चला कि जिस तरह से मैं मेटियर एप्स का निर्माण कर रहा था, उस क्षमता पर झुका हुआ था कि इस नए संस्करण को हटा दिया गया है। मेरे ऐप्स में, मैं पुराने वाक्यविन्यास के साथ मददगार/फ़ंक्शंस को परिभाषित कर रहा हूं, फिर उन तरीकों को अन्य सहायकों से बुला रहा हूं। मैंने पाया कि यह मुझे मेरे कोड को साफ और सुसंगत रखने में मदद करता है।

उदाहरण के लिए, मैं इस तरह एक नियंत्रण हो सकता है:

//Common Method 
Template.myTemplate.doCommonThing = function() 
{ 
    /* Commonly used method is defined here */ 
} 

//Other Methods 
Template.myTemplate.otherThing1 = function() 
{ 
    /* Do proprietary thing here */ 
    Template.myTemplate.doCommonThing(); 
} 

Template.myTemplate.otherThing2 = function() 
{ 
    /* Do proprietary thing here */ 
    Template.myTemplate.doCommonThing(); 
} 

लेकिन इस नई विधि उल्का पता चलता है (जो मुझे लगता है कि मैं गलत सब साथ था बनाता है) के साथ उपलब्ध हो प्रतीत नहीं होता है। मेरा सवाल है, टेम्पलेट के हेल्पर्स के बीच सामान्य, टेम्पलेट-विशिष्ट तर्क साझा करने का पसंदीदा तरीका क्या है?

+0

मुझे एहसास है कि यह अभी भी एक वैध सवाल है, क्योंकि टेस्ट रिग टेम्पलेट हेल्पर्स में कॉल करने में सक्षम होंगे। अन्यथा आप अपने आवेदन को अनावश्यक रूप से फिर से लिखना समाप्त कर देते हैं ... – MrMowgli

+0

आपको यह उत्तर उपयोगी हो सकता है: https://stackoverflow.com/questions/27755891/meteor-what-is-spacebars-kw-hash-object#answer-27756461 –

उत्तर

3

क्षमा करें अगर मैं सुस्त हूं, लेकिन क्या आप फ़ंक्शन को ऑब्जेक्ट के रूप में घोषित नहीं कर सकते हैं और इसे एकाधिक सहायकों को सौंप सकते हैं? उदाहरण के लिए:

// Common methods 
doCommonThing = function(instance) // don't use *var* so that it becomes a global 
{ 
    /* Commonly used method is defined here */ 
} 

Template.myTemplate.helpers({ 
    otherThing1: function() { 
     var _instance = this; // assign original instance *this* to local variable for later use 
     /* Do proprietary thing here */ 
     doCommonThing(_instance); // call the common function, while passing in the current template instance 
    }, 
    otherThing2: function() { 
     var _instance = this; 
     /* Do some other proprietary thing here */ 
     doCommonThing(_instance); 
    } 
}); 

वैसे, अगर आप आप लगातार एक से अधिक टेम्पलेट में एक ही सहायकों डुप्लिकेट बना रहे हैं नोटिस, यह बजाय एक से अधिक स्थानों के लिए एक ही समारोह देने की Template.registerHelper उपयोग करने के लिए मदद कर सकता है।

+0

यह कसकर आपके कोड जोड़ता है। सब कुछ जो कॉमॉन टिंग() पर निर्भर करता है उसे पता होना चाहिए कि यह मौजूद है, और इसे कैसे कहा जाता है। यह DRY है, लेकिन युग्मित। –

+0

आपको यह उत्तर उपयोगी हो सकता है: https://stackoverflow.com/questions/27755891/meteor-what-is-spacebars-kw-hash-object#answer-27756461 –

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