Tôi đang làm việc với ứng dụng ví dụ Todos bundled with the latest version of Backbone (0.9.2) trong khi tìm hiểu về Backbone.js. Câu hỏi của tôi là, tại sao ứng dụng được thiết kế để kích hoạt sự kiện kết xuất hai lần khi thêm mô hình vào bộ sưu tập Todos?Các vụ cháy Backbone.js hiển thị hai lần trên bộ sưu tập thêm
Nếu tôi đặt dòng này trong chức năng làm cho của TodoView: "Rendering"
// Re-render the titles of the todo item.
render: function() {
console.log("Rendering!");
this.$el.html(this.template(this.model.toJSON()));
Sau đó, xuất hiện hai lần trong bảng điều khiển. Tôi hiểu điều này là bởi vì quan điểm liên kết với sự kiện thay đổi của mô hình để của view render:
initialize: function() {
this.model.bind('change', this.render, this);
Và làm được gọi trong addOne, được ràng buộc với Todos add sự kiện:
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
},
Nhưng là thực hành tiêu chuẩn thiết kế dựng hình kép này? Có vẻ như khung nhìn nên được hiển thị khi tạo (hoặc truy cập vào DOM), và sau đó lại nếu mô hình cơ bản thay đổi. Trong trường hợp này, không có gì đang được thay đổi, nhưng kết xuất được gọi hai lần.
Một lần nữa, tôi chỉ học về xương sống, vì vậy tôi có thể có một sự hiểu lầm cơ bản dẫn đến sự nhầm lẫn của tôi.
nice catch! .. bạn cũng có thể sử dụng '{silent: true}' để tránh các sự kiện kích hoạt. – fguillen
Bạn nói đúng, đó là lý do sự kiện thay đổi đang được kích hoạt. Tuy nhiên, việc thay đổi mã theo cách bạn đề xuất dừng sự kiện nhưng cũng phá vỡ chức năng (Tôi không còn có thể xóa các mục) nữa. Rõ ràng điều này không quan trọng nhiều trong việc trả lời câu hỏi của tôi, nhưng chỉ trong trường hợp ai đó trong tương lai đọc điều này, tôi muốn chỉ ra điều đó. – jcady
Xóa các mục _permanently_ nghĩa là. Sau khi xóa, nếu tôi làm mới chúng vẫn tồn tại. – jcady