2012-11-17 8 views
6

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

Meteor.subscribe('alldrawings', myRendering); 

function myRendering(){ 
    //do some no-markup stuff with the data 
    //(i'm creating canvas objs and drawing on them) 
} 

इस तरह से यह करने के लिए है:

मैं इस समाधान के साथ आ गया है? क्या इसके अलावा कोई अनुशंसित विधि है?

उत्तर

2

आप निश्चित रूप से सदस्यता कॉलबैक का उपयोग कर सकते हैं। AFAIK, यदि सदस्यता पूरी तरह से अपडेट की गई थी, तो यह पता लगाने का एकमात्र संभावित तरीका है।

एक और विकल्प संग्रह कर्सर के साथ पर्यवेक्षक का उपयोग करना है: http://docs.meteor.com/#observe। लेकिन मुझे लगता है कि पर्यवेक्षकों को लगातार एक-एक करके कहा जाता है, जैसे डेटा आता है, और एक बार पूरा होने पर (केवल) नहीं।

3

आप सेटअप एक प्रतिक्रियाशील चर खुद कर सकते हैं:

alldrawingsReady = new ReactiveVar(false); 

Meteor.subscribe('alldrawings', function() { 
    alldrawingsReady.set(true); 
}); 

Tracker.autorun(function(){ 
    if(!alldrawingsReady.get()) { 
     return; 
    } 

    // Do some no-markup stuff with the data 
    // (eg. creating canvas objs and drawing on them) 
}); 

और यदि आप एक संग्रह और एक टेम्पलेट के लिए तैयार करने की जरूरत है चाहते हैं, इस का उपयोग करें:

Template.my_template.rendered = function() { 
    this.autorun(function(){ 
     if(!alldrawingsReady.get()) { 
      return; 
     } 

     // Do some DOM manipulations based on the data 
    }); 
} 
संबंधित मुद्दे