sql >> Base de Datos >  >> NoSQL >> MongoDB

Sistema de votación con Backbone.js

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.