2014-10-09 4 views
9

मुझे अपने सभी टेम्पलेट्स में रेंडर कॉलबैक असाइन करने के लिए मजबूर होना पड़ता है।उल्का ब्लेज़ में सभी टेम्पलेट्स को कॉलबैक रेंडर करें

0.9.0 जब तक मैं इस तरह यह करने के लिए इस्तेमाल किया:

_.each(Template, function(template, name) { 
    //... 
    template.rendered = function() { 
    //... 
    }; 
}); 

लेकिन अब, टेम्पलेट एक निर्माता और नहीं एक वस्तु है, इसलिए इस विधि यहाँ काम नहीं करेगा। क्या सभी टेम्पलेट्स या अग्नि समारोह में कॉलबैक फ़ंक्शन को पास करने का कोई तरीका है जब सभी टेम्पलेट्स को ब्लेज़ का उपयोग करके प्रस्तुत किया गया था?

उत्तर

9

यहां एक त्वरित कार्यवाही है जिसके साथ मैं आया हूं, यह पता लगाने के लिए कि प्रत्येक Template संपत्ति पर यह पता लगाने के लिए कि क्या यह टेम्पलेट परिभाषा के अनुरूप है, और यदि ऐसा होता है, तो ऑनरेंडर्ड कॉलबैक असाइन करें।

// make sure this code is executed after all your templates have been defined 
Meteor.startup(function(){ 
    for(var property in Template){ 
    // check if the property is actually a blaze template 
    if(Blaze.isTemplate(Template[property])){ 
     var template=Template[property]; 
     // assign the template an onRendered callback who simply prints the view name 
     template.onRendered(function(){ 
     console.log(this.view.name); 
     }); 
    } 
    } 
}); 

मुझे नहीं पता कि आपका उपयोग केस क्या है, इसलिए इसके आधार पर बेहतर समाधान हो सकते हैं।

+1

यह वास्तव में मुझे चाहिए, लेकिन किसी भी विचार को यह कोड कहां रखना है ताकि सभी टेम्पलेट्स को परिभाषित करने के बाद लोड हो जाए? और 'टेम्पलेट [प्रॉपर्टी] .viewName' की जांच करने के बजाय Blaze.isTemplate फ़ंक्शन –

+1

' Blaze.isTemplate' सुझाव 'के लिए धन्यवाद, मैंने यह सुनिश्चित करने के लिए क्लाइंट-साइड' Meteor.startup' का उपयोग करने के लिए अपना कोड अपडेट किया है। प्रत्येक टेम्पलेट्स के बाद निष्पादित किया गया है। – saimeunt

+0

एक आकर्षण की तरह काम करता है! बहुत धन्यवाद! –

-4

उल्का 1.2.1 के साथ टेम्पलेट ऑब्जेक्ट पर एक 'सभी टेम्पलेट' को प्रस्तुत व्यवहार पर एक ऑनरेंडर्ड (हुक) फ़ंक्शन है।

Template.onRendered(function(){ 
    var template = this; 
    Deps.afterFlush(function() { 
    console.log("triggering Jquery mobile component creation for "+template.view.name); 
    $(template.firstNode.parentElement).trigger("create"); 
    }); 
}); 

Deps.afterFlush (कॉलबैक) के माध्यम से स्थगित अद्यतन वैकल्पिक है और आपकी आवेदन आवश्यकताओं के अधीन है।

+2

मैं उल्का 1.2.1 पर हूं लेकिन यह समाधान काम नहीं करता है: 'TypeError: Template.onRendered एक फ़ंक्शन नहीं है –

+0

यह सुनिश्चित नहीं है कि यह आपके लिए क्यों काम नहीं करता है और स्पष्ट रूप से अन्य लोगों ने उत्तर को वोट दिया है, लेकिन यह सुविधा कई उत्पादन अनुप्रयोगों में मेरे लिए अपेक्षित के रूप में काम कर रही है। [स्रोत कोड] देखें (https://github.com/meteor/blaze/commit/1d175814f1d9ad857743601f55073395dbdfedad) और यदि संभव हो तो पुष्टि करें कि आपकी टेम्पलेट ऑब्जेक्ट वास्तव में एक उल्का ब्लेज़ टेम्पलेट ऑब्जेक्ट है और प्रतिस्थापित/उत्परिवर्तित नहीं है ... – user1756588

+0

बस चेक किया गया उल्का 1.4 और 'Template.onRendered'' अपरिभाषित' है। –

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