No tiene que guardar todo el modelo en el servidor solo para cambiar una cosa, puede (y debería en este caso) agregar un upVote
método a su modelo que hace una llamada AJAX de "incremento de votos a favor" a su servidor. En tu modelo tendrías algo como esto:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
Y luego la vista tendría esto para manejar la acción de voto a favor:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
y probablemente tenga un oyente para eventos de cambio en los upVotes
del modelo. property para incrementar correctamente el contador de votos a favor que se muestra (si tiene tal cosa).
Además, su /some/upvote/path
en el servidor simplemente enviaría un $inc
actualizar
en MongoDB para evitar el mismo problema de "dos cosas sucediendo a la vez" en su servidor. Si estuviera usando una base de datos relacional, querría terminar haciendo algo como update t set upvotes = upvotes + 1 where id = ?
.
No hay necesidad de un viaje de ida y vuelta de "consultar, actualizar, guardar" en el cliente o en el servidor para una operación de incremento simple. En su lugar, trate el incremento como una operación de incremento único y empuje ese incremento hasta su capa final de almacenamiento de datos persistentes.