Non devi salvare l'intero modello sul server solo per cambiare una cosa, puoi (e dovresti in questo caso) aggiungere un upVote
metodo al tuo modello che esegue una chiamata AJAX "increment upvotes" al tuo server. Nel tuo modello avresti qualcosa del genere:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
E poi la vista avrebbe questo per gestire l'azione di voto positivo:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
e probabilmente avresti un listener per gli eventi di modifica su upVotes
del modello proprietà per incrementare correttamente il contatore di voti positivi visualizzato (se hai una cosa del genere).
Inoltre, il tuo /some/upvote/path
sul server invierebbe semplicemente un $inc
aggiorna
in MongoDB per evitare lo stesso problema "due cose che accadono contemporaneamente" sul tuo server. Se stavi utilizzando un database relazionale, vorresti finire per fare qualcosa come update t set upvotes = upvotes + 1 where id = ?
.
Non è necessario un round trip di "interrogazione, aggiornamento, salvataggio" sul client o sul server per una semplice operazione di incremento. Invece, considera l'incremento come una singola operazione di incremento e spingi quell'incremento fino al livello di archiviazione dei dati persistente finale.