Du behøver ikke at gemme hele modellen på serveren bare for at ændre én ting, du kan (og bør i dette tilfælde) tilføje en upVote
metode til din model, der laver et "increment upvotes" AJAX-kald til din server. I din model ville du have noget som dette:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
Og så ville synspunktet have dette til at håndtere opstemmehandlingen:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
og du vil sandsynligvis have en lytter til ændringshændelser på modellens upVotes
egenskab for korrekt at øge den viste upvote-tæller (hvis du har sådan en).
Desuden din /some/upvote/path
på serveren ville bare sende en $inc
opdatering
ind i MongoDB for at undgå det samme "to ting sker på én gang"-problem på din server. Hvis du brugte en relationsdatabase, ville du gerne ende med at gøre noget som update t set upvotes = upvotes + 1 where id = ?
.
Der er ikke behov for en "forespørgsel, opdatering, gem" tur-retur på hverken klienten eller serveren for en simpel trinoperation. Behandl i stedet stigningen som en enkelt trinoperation og skub stigningen helt ned til dit sidste vedvarende datalagerlag.