2013-05-24 34 views
7

Trong sự kiện thay đổi toàn cầu này, có cách nào tôi có thể phát hiện thuộc tính nào đã thay đổi không?Nhận thuộc tính đã thay đổi về sự kiện thay đổi

myModel.on('change', function(model) { 
    // Which attribute changed? 
}); 

tôi thử như sau:

  • Sử dụng myModel.previousAttributes() nhưng nó luôn luôn quay trở lại giá trị mới nhất ... Tôi đoán nó chỉ cập nhật sau khi một sự tương tác máy chủ.
  • Lặp lại các thuộc tính máng và sử dụng myModel.hasChanged(attr) nhưng nó luôn trả về false.

Có cách nào để thực hiện việc này không?

Trả lời

12

Bạn có thể sử dụng model.changedAttributes

changedAttributes model.changedAttributes ([thuộc tính])
Lấy một hash của các thuộc tính duy nhất của mô hình đó đã thay đổi, hoặc false nếu có ai sánh kịp.
Tùy chọn, băm thuộc tính bên ngoài có thể được chuyển thành trong, trả về các thuộc tính trong hàm băm khác với mô hình. này có thể được sử dụng để tìm ra các phần của một cái nhìn nên được cập nhật, hoặc những gì gọi cần phải được thực hiện để đồng bộ hóa các thay đổi đối với máy chủ

Ví dụ,

var m = new Backbone.Model({ 
    att1: 'a', 
    att2: 'b', 
    att3: 'c' 
}); 

m.on('change', function() { 
    console.log(m.changedAttributes()); 
    console.log(_.keys(m.changedAttributes())); 
}); 

m.set({ 
    att1: 'd', 
    att3: 'e' 
}); 

Và một bản demo http://jsfiddle.net/nikoshr/NYnqM/

+0

Tuyệt vời, chỉ cần những gì tôi cần cảm ơn – jviotti

+1

Tôi có thể bị trễ bữa tiệc. Nếu bạn đang sử dụng Backbone 0.9.9 và ở trên bắt đầu sử dụng .listenĐể thay vì .on để bạn không kết thúc với các đối tượng miễn dịch với bộ sưu tập rác. – Ananda

+0

Yo ... cool ... cảm ơn !!! –

Các vấn đề liên quan