Не е нужно да запазвате целия модел на сървъра само за да промените едно нещо, можете (и трябва в този случай) да добавите upVote
метод към вашия модел, който прави AJAX извикване на "increment upvotes" към вашия сървър. Във вашия модел ще имате нещо подобно:
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 = ?
.
Няма нужда от „запитване, актуализиране, записване“ на клиента или сървъра за проста операция за увеличаване. Вместо това третирайте увеличението като еднократна операция за увеличение и натиснете това увеличение до крайния си слой за постоянно съхранение на данни.