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.