Nemusíte ukládat celý model na server, jen abyste změnili jednu věc, můžete (a v tomto případě byste měli) přidat upVote
metodu k vašemu modelu, která provede volání AJAX „increment upvotes“ na váš server. Ve svém modelu byste měli něco takového:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
A pak by pohled měl toto, aby zvládl akci pro souhlas:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
a pravděpodobně byste měli posluchače událostí změn na upVotes
modelu vlastnost správně zvýšit zobrazené počítadlo hlasů pro (pokud takovou věc máte).
Dále váš /some/upvote/path
na serveru by pouze odeslal $inc
aktualizace
do MongoDB, abyste se vyhnuli stejnému problému „dvě věci se dějí najednou“ na vašem serveru. Pokud byste používali relační databázi, chtěli byste skončit s něčím jako update t set upvotes = upvotes + 1 where id = ?
.
Pro jednoduchou operaci přírůstku není potřeba zpáteční cesta „dotaz, aktualizace, uložení“ na klientovi ani na serveru. Namísto toho zacházejte s přírůstkem jako s jedinou operací přírůstku a posuňte tento přírůstek až dolů do vaší konečné vrstvy trvalého úložiště dat.