Вам не нужно сохранять всю модель на сервере только для того, чтобы изменить что-то одно, вы можете (и должны в этом случае) добавить в вашу модель метод upVote
, который выполняет AJAX-вызов "increment upvotes"ваш сервер.В вашей модели у вас будет что-то вроде этого:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
И тогда представление будет иметь это для обработки действия upvote:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
и у вас, вероятно, будет слушательчтобы события изменения свойства upVotes
модели правильно увеличивали отображаемый счетчик повышений (если у вас есть такая вещь).
Кроме того, ваш /some/upvote/path
на сервере просто отправит $inc
обновите в MongoDB, чтобы избежать той же проблемы "две вещи происходят одновременно" на вашем сервере.Если бы вы использовали реляционную базу данных, вы бы хотели сделать что-то вроде update t set upvotes = upvotes + 1 where id = ?
.
Нет необходимости в двустороннем запросе «запрос, обновление, сохранение» на клиенте или сервере.для простой операции приращения.Вместо этого обрабатывайте приращение как одну операцию приращения и перемещайте это приращение до конечного уровня постоянного хранения данных.