MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Sistema de votação com Backbone.js


Você não precisa salvar todo o modelo no servidor apenas para alterar uma coisa, você pode (e deve neste caso) adicionar um upVote método para seu modelo que faz uma chamada AJAX de "incremento de votos positivos" para seu servidor. No seu modelo você teria algo assim:
upVote: function() {
    var self = this;
    $.ajax({
        url: '/some/upvote/path',
        type: 'POST',
        success: function(data) {
            self.set('upVotes', data.upVotes);
        },
        // ...
    });
}

E então a view teria isso para lidar com a ação upvote:
upVote: function() {
    // Highlight the upvote button or provide some other feedback that
    // the upvote has been seen.
    this.model.upVote();
}

e você provavelmente teria um ouvinte para eventos de mudança no upVotes do modelo para incrementar corretamente o contador de votos positivos exibido (se você tiver tal coisa).

Além disso, seu /some/upvote/path no servidor enviaria apenas um $inc atualizar no MongoDB para evitar o mesmo problema de "duas coisas acontecendo ao mesmo tempo" em seu servidor. Se você estivesse usando um banco de dados relacional, você gostaria de fazer algo como update t set upvotes = upvotes + 1 where id = ? .

Não há necessidade de uma viagem de ida e volta "consultar, atualizar, salvar" no cliente ou no servidor para uma operação de incremento simples. Em vez disso, trate o incremento como uma operação de incremento único e empurre esse incremento até a camada de armazenamento de dados persistente final.