2012-04-10 4 views
31

कहें कि मेरे एप्लिकेशन में किसी प्रकार की वस्तुओं की एक सूची है, और उपयोगकर्ता सूची में नए आइटम डाल सकते हैं।उल्का में, मैं सर्वर द्वारा पुष्टि किए जाने तक नए डाले गए डेटा को ग्रिड आउट के रूप में कैसे दिखाऊं?

आमतौर पर उल्का क्या होता है: जब कोई उपयोगकर्ता सूची में किसी आइटम को सम्मिलित करता है, तो यह सर्वर की पुष्टि के इंतजार किए बिना तुरंत अपने ब्राउज़र में दिखाई देता है।

मुझे जो चाहिए वह है: जब कोई आइटम इस स्थिति में है (सबमिट किया गया है लेकिन सर्वर द्वारा अभी तक स्वीकार नहीं किया गया है), यह सूची में इसकी सही स्थिति पर दिखाई देता है, लेकिन बाहर हो गया।

क्या उल्का ऐसा करने का कोई तरीका है?

उत्तर

38

निश्चित रूप से। एक विधि बनाएं जो सम्मिलन करता है। जब विधि चलती है, तो यह जांचने के लिए जांच करें कि यह सिमुलेशन में चल रहा है या नहीं, और यदि ऐसा है, तो सम्मिलित आइटम पर 'अस्थायी' या 'पुष्टिकृत' ध्वज सेट करें। यह तय करने के लिए कि आइटम को ग्रेड आउट के रूप में प्रस्तुत करना है या नहीं।

आप यह मानते हुए MongoDB उपयोग कर रहे हैं:

// Put this in a file that will be loaded on both the client and server 
Meteor.methods({ 
    add_item: function (name) { 
    Items.insert({name: name, 
        confirmed: !this.isSimulation}); 
    } 
}); 

विधि कॉलिंग:

Meteor.call("add_item", "my item name"); 

तुम सब करने की जरूरत है यही कारण है कि। यह काम करने का कारण यह है कि एक बार जब सर्वर ने आइटम को सहेजना समाप्त कर दिया है, तो ग्राहक पर स्थानीय (अनुरूपित) परिवर्तन का समर्थन किया जाएगा और सर्वर पर जो भी हुआ वह बदल जाएगा (जिसमें 'पुष्टिकृत' ध्वज शामिल नहीं होगा।)

उपरोक्त यह करने का सबसे आसान तरीका है, लेकिन इसके परिणामस्वरूप आपके डेटाबेस में रिकॉर्ड्स के परिणामस्वरूप सत्य की 'पुष्टि' की पुष्टि होगी। इससे बचने के लिए, केवल पुष्टि की गई विशेषता को सेट करें यदि यह गलत है।

isSimulation बारे में अधिक जानकारी के लिए प्रलेखन के इस भाग को देखें और Meteor.methods

+1

क्या इससे कोई फर्क पड़ता है यदि मैंने इसके बजाय Meteor.isClient का उपयोग किया है .इस सिमुलेशन यहाँ? –

+0

[यह SO उत्तर] (http://stackoverflow.com/a/27315009/302898) 'isClient' और' isSimulation' के बीच के अंतर को संबोधित करता है। संक्षिप्त उत्तर: आपको यहां 'isSimulation' का उपयोग करना चाहिए। – Sean

1

यह है कि मैं क्या सर्वर साइड पर एक पर्यवेक्षक, मैं एक चर बुलाया ग्राहक के पक्ष में ही एक बार से झूठी सूचित बनाया जोड़ा था सर्वर को उडपेट प्राप्त होता है जो इसे सही सूचित करेगा और ग्राहक को उसी पर अपडेट किया जाएगा।

Collection.find({"notify":false}).observe({ 
    "added" : function(first){ 
     collection.update({"_id":first._id},{$set : {"notify":true}}); 
    } 
});