U hoeft niet het hele model op de server op te slaan om maar één ding te veranderen, u kunt (en moet in dit geval) een upVote
toevoegen methode toe aan uw model die een "increment upvotes" AJAX-aanroep naar uw server doet. In uw model zou u zoiets als dit hebben:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
En dan zou de weergave dit hebben om de upvote-actie af te handelen:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
en je zou waarschijnlijk een luisteraar hebben voor veranderingsgebeurtenissen op de upVotes
van het model eigenschap om de weergegeven upvote-teller correct te verhogen (als je zoiets hebt).
Verder is uw /some/upvote/path
op de server zou gewoon een $inc
sturen bijwerken
in MongoDB om te voorkomen dat hetzelfde "twee dingen tegelijk gebeuren" probleem op uw server. Als je een relationele database zou gebruiken, zou je uiteindelijk iets willen doen als update t set upvotes = upvotes + 1 where id = ?
.
Er is geen "query, update, save"-rondreis nodig op de client of de server voor een eenvoudige stapsgewijze bewerking. Behandel de increment in plaats daarvan als een enkele increment-bewerking en duw die increment helemaal naar uw laatste permanente gegevensopslaglaag.