इस मामले में, यह ज्यादातर उल्का के डेटा मॉडल की गलतफहमी के बारे में है।
हालांकि विधि कॉल का उपयोग करके डेटा भेजना संभव है, आमतौर पर आप प्रकाशनों और सदस्यताओं का उपयोग करना चाहेंगे
क्लाइंट को डेटा भेजने के लिए। इनमें लगभग जादुई गुण है कि क्वेरी लाइव . हैं - यानी, क्वेरी का कोई भी अपडेट क्लाइंट को स्वचालित रूप से भेजा जाएगा। आपके पास वर्तमान कोड है, यदि यह ठीक से काम करता है, तो लाइव डेटा नहीं होगा। खास मुद्दा यह है कि Meteor.call
अतुल्यकालिक है, इसलिए आपके संदेश सहायक को कुछ भी दिखाई नहीं देगा।
इसके बजाय, यहाँ आप क्या करना चाहते हैं। सर्वर पर, आप एक प्रकाशन सेट अप करेंगे संदेशों का संग्रह:
Meteor.publish("someWeirdName", function() {
return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});
अपने कोड से अंतर नोट करें:कोई fetch()
नहीं है , क्योंकि हम एक लाइव कर्सर चाहते हैं, और 20
शायद वही है जो आप एक सीमा विकल्प के रूप में करना चाहते थे। ध्यान दें कि मैंने इसे someWeirdName
. भी कहा है क्योंकि वह प्रकाशन . का नाम है , और संग्रह नहीं, जिसका उपयोग आप क्लाइंट पर सदस्यता लेने के लिए करेंगे। अधिक विस्तृत स्पष्टीकरण के लिए, आप यह पोस्ट
देखना चाहेंगे। ।
फिर, क्लाइंट पर, आपको बस निम्नलिखित की आवश्यकता है:
Meteor.subscribe("someWeirdName");
Template.messages.helpers({
showMessages: function(){
return Messages.find();
}
});
ध्यान दें कि Meteor.subscribe("Messages")
. की आपकी पिछली कॉल कुछ नहीं कर रहा था, क्योंकि Messages
. नाम का कोई प्रकाशन नहीं था . साथ ही, हम संदेशों को प्रदर्शित करने के लिए एक कर्सर बनाने के लिए संदेशों के क्लाइंट साइड कैश का उपयोग करने जा रहे हैं।
साथ ही, इस सभी कोड के लिए आवश्यक है कि आपके पास सर्वर और क्लाइंट दोनों पर निम्नलिखित घोषित हों:
Messages = new Mongo.Collection("callMeWhateverYouWant");
यह भी ध्यान दें कि इस संग्रह को तत्काल करने के लिए उपयोग किए जाने वाले तर्क का आपके कोड में संग्रह को संदर्भित करने के तरीके से कोई लेना-देना नहीं है, जब तक कि आप कस्टम प्रकाशन . यह केवल अंतर्निहित डेटाबेस में संग्रह की पहचान करता है।