Vous n'avez pas besoin d'enregistrer tout le modèle sur le serveur juste pour changer une chose, vous pouvez (et devriez dans ce cas) ajouter un upVote
méthode à votre modèle qui effectue un appel AJAX "incrémenter les votes positifs" à votre serveur. Dans votre modèle, vous auriez quelque chose comme ceci :
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
Et puis la vue aurait ceci pour gérer l'action de vote positif :
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
et vous auriez probablement un écouteur pour les événements de changement sur les upVotes
du modèle propriété pour incrémenter correctement le compteur de votes positifs affiché (si vous avez une telle chose).
De plus, votre /some/upvote/path
sur le serveur enverrait simplement un $inc
mettre à jour
dans MongoDB pour éviter le même problème "deux choses qui se produisent en même temps" sur votre serveur. Si vous utilisiez une base de données relationnelle, vous voudriez finir par faire quelque chose comme update t set upvotes = upvotes + 1 where id = ?
.
Il n'y a pas besoin d'un aller-retour "requête, mise à jour, sauvegarde" sur le client ou le serveur pour une simple opération d'incrémentation. Au lieu de cela, traitez l'incrément comme une opération d'incrément unique et poussez cet incrément jusqu'à votre dernière couche de stockage de données persistantes.