Du behöver inte spara hela modellen på servern bara för att ändra en sak, du kan (och bör i det här fallet) lägga till en upVote
metod till din modell som gör ett "inkrementera upvotes" AJAX-anrop till din server. I din modell skulle du ha något sånt här:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
Och sedan skulle åsikten ha detta för att hantera uppröstningsåtgärden:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
och du skulle förmodligen ha en lyssnare för förändringshändelser på modellens upVotes
egenskap för att korrekt öka den visade upprösträknaren (om du har något sådant).
Dessutom, din /some/upvote/path
på servern skulle bara skicka en $inc
uppdatera
in i MongoDB för att undvika samma "två saker som händer på en gång"-problem på din server. Om du använde en relationsdatabas skulle du vilja göra något som update t set upvotes = upvotes + 1 where id = ?
.
Det finns inget behov av en "fråga, uppdatera, spara" tur och retur på varken klienten eller servern för en enkel inkrementoperation. Behandla istället inkrementet som en enda inkrementoperation och tryck det inkrementet hela vägen ner till ditt slutliga beständiga datalagringslager.