Bạn không phải lưu toàn bộ mô hình vào máy chủ chỉ để thay đổi một thứ, bạn có thể (và trong trường hợp này nên thêm một upVote
phương thức cho mô hình của bạn thực hiện cuộc gọi AJAX "tăng số phiếu ủng hộ" tới máy chủ của bạn. Trong mô hình của bạn, bạn có một cái gì đó như thế này:
upVote: function() {
var self = this;
$.ajax({
url: '/some/upvote/path',
type: 'POST',
success: function(data) {
self.set('upVotes', data.upVotes);
},
// ...
});
}
Và sau đó, chế độ xem sẽ có điều này để xử lý hành động ủng hộ:
upVote: function() {
// Highlight the upvote button or provide some other feedback that
// the upvote has been seen.
this.model.upVote();
}
và bạn có thể có một trình nghe các sự kiện thay đổi trên upVotes
của mô hình thuộc tính để tăng đúng bộ đếm ủng hộ được hiển thị (nếu bạn có một thứ như vậy).
Hơn nữa, /some/upvote/path
của bạn trên máy chủ sẽ chỉ gửi một $inc
cập nhật
vào MongoDB để tránh cùng một sự cố "hai điều xảy ra cùng một lúc" trên máy chủ của bạn. Nếu bạn đang sử dụng cơ sở dữ liệu quan hệ, bạn sẽ muốn thực hiện một việc gì đó như update t set upvotes = upvotes + 1 where id = ?
.
Không cần thực hiện một chuyến khứ hồi "truy vấn, cập nhật, lưu" trên máy khách hoặc máy chủ cho một hoạt động gia tăng đơn giản. Thay vào đó, hãy coi số gia tăng như một thao tác tăng đơn lẻ và đẩy gia số đó xuống tận lớp lưu trữ dữ liệu liên tục cuối cùng của bạn.