Với đoạn mã sau:Tại sao mô hình Backbone của tôi hasChanged() luôn trả về false?
var m = new Backbone.Model({
name: 'joshua'
});
m.set('name', 'something else');
Nếu bây giờ tôi gọi m.hasChanged()
hoặc m.hasChanged('name')
tôi nhận được false
. Tại sao? Sự hiểu biết của tôi là cả hai điều này nên trả về true
.
m.changedAttributes()
cũng trả về false.
Đây là một fiddle minh họa những gì tôi đang làm, và mong đợi: http://jsfiddle.net/9cvVv/88/
EDIT: Có vẻ như rằng trừ khi bạn vượt qua { silent: true; }
với phương pháp set()
sau đó nó sẽ cháy sự kiện change
trên mô hình của bạn mà xóa các số changedAttributes()
, v.v. Về cơ bản, các thuộc tính này chỉ theo dõi các thay đổi kể từ lần cuối cùng sự kiện change
được kích hoạt.
Tôi đã đọc điều đó trong tài liệu nhưng không thực sự hiểu nó lúc đầu.
Điều này dường như không hữu ích đối với tôi. Tôi sẽ đánh giá cao bất kỳ lời giải thích về lý do tại sao điều này hoạt động theo cách của nó và cách tốt nhất để đạt được kết quả tôi muốn. (Đi qua khoảng {silent: true; }
và từ bỏ việc sử dụng các sự kiện change
có vẻ như một sự lãng phí.)
Ah ha. Tôi đã tạo một phương thức 'save()' cho các bộ sưu tập gửi một loạt các mô hình và trả về. Đã tự hỏi tại sao hasChanged() dường như không làm gì cả. :-) Cảm ơn! – jmk2142
Điều này không còn đúng trong các phiên bản mới hơn của Backbone; xem câu trả lời của tôi – pimlottc
Lưu ngày của tôi với xương sống 0.9.2 ... – gor181