आपको केवल एक चीज़ बदलने के लिए पूरे मॉडल को सर्वर पर सहेजने की ज़रूरत नहीं है, आप (और इस मामले में) एक upVote
जोड़ सकते हैं आपके मॉडल के लिए विधि जो आपके सर्वर पर "वृद्धि अपवोट" AJAX कॉल करती है। आपके मॉडल में आपके पास कुछ ऐसा होगा:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
और फिर दृश्य में यह अपवोट कार्रवाई को संभालने के लिए होगा:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
और शायद आपके पास मॉडल के upVotes
. पर परिवर्तन ईवेंट के लिए एक श्रोता होगा प्रदर्शित अपवोट काउंटर को ठीक से बढ़ाने के लिए संपत्ति (यदि आपके पास ऐसा कुछ है)।
इसके अलावा, आपका /some/upvote/path
सर्वर पर बस एक $inc
भेजेगा अपडेट करें
अपने सर्वर पर एक ही "दो चीजें एक साथ हो रही" समस्या से बचने के लिए MongoDB में। यदि आप एक रिलेशनल डेटाबेस का उपयोग कर रहे थे, तो आप कुछ ऐसा करना चाहेंगे जैसे update t set upvotes = upvotes + 1 where id = ?
।
एक साधारण इंक्रीमेंट ऑपरेशन के लिए क्लाइंट या सर्वर पर "क्वेरी, अपडेट, सेव" राउंड ट्रिप की कोई आवश्यकता नहीं है। इसके बजाय, इंक्रीमेंट को सिंगल इंक्रीमेंट ऑपरेशन के रूप में मानें और उस इंक्रीमेंट को अपने अंतिम लगातार डेटा स्टोरेज लेयर तक धकेलें।