7

Tôi muốn có sự kiện thay đổi để kích hoạt bất kỳ lúc nào tôi thay đổi bất kỳ thuộc tính nào của mô hình, ngoại trừ một. Điều này có thể không? Bên cạnh đó:Xương sống - Có thể liên kết sự kiện thay đổi với mô hình, ngoại trừ một thuộc tính không?

model.bind('change:prop1', func); 
model.bind('change:prop2', func); 
model.bind('change:prop3', func); 
etc.... 

Hoặc cách khác, để tìm ra thuộc tính nào đã kích hoạt thay đổi từ bên trong trình xử lý sự kiện?

Cảm ơn

Trả lời

11

Bạn có thể sử dụng model.bind('change',function() {/*...*/}) và trong hàm sử dụng hasChanged để kiểm tra các thuộc tính: if(model.hasChanged('propIWantToExclude')) return;

+0

Có ai trả lời phần đầu tiên của câu hỏi không? I E. Làm cách nào để kích hoạt sự kiện thay đổi bất cứ lúc nào tôi thay đổi bất kỳ thuộc tính nào của mô hình, ngoại trừ một mô hình? –

+0

^chỉ cần sử dụng "thay đổi" như trong phản hồi ... mặc dù tôi thấy nó đã được chỉnh sửa, vì vậy bạn có thể hỏi trước khi chỉnh sửa :) – gthmb

0

Hưởng ứng yêu cầu David tuite để trả lời phần đầu tiên của câu hỏi, bạn có thể thiết lập một chức năng để trả lời sự kiện "đã thay đổi" và sau đó kích hoạt sự kiện tùy chỉnh nếu thuộc tính bạn muốn bỏ qua không bị thay đổi.

Logic này sẽ kích hoạt sự kiện tùy chỉnh: 'somePropertyOtherThanThePropIWantToExcludeChanged' nếu thuộc tính không bị thay đổi. Nếu nhiều thuộc tính đã được thay đổi, trong đó có một bạn muốn bỏ qua, sau đó các sự kiện tùy chỉnh cũng sẽ không cháy: câu trả lời

model.bind('change', function(){ 
    if(!model.hasChanged('propIWantToExclude')){ 
     model.trigger('somePropertyOtherThanThePropIWantToExcludeChanged'); 
    } 
}); 
3

của Justin ở trên sẽ trở lại khi 'propIWantToExclude' và một số thuộc tính khác được thay đổi với nhau. Có thể bạn không muốn làm điều đó, vì vậy bạn cũng nên xem kích thước của model.changedAttributes:

if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) { 
    return; 
} 
+0

Nên là: "model.hasChanged ('attrIWantToExclude') && Object.keys (model.changedAttributes()). length == 1 ". Hoặc "Object.keys (model.changed) .length == 1 && ...". changedAttributes là một hàm và nó trả về một hash của các đối tượng đã thay đổi hoặc false nếu không có. hash.length không hoạt động vì vậy bạn cần một cái gì đó như thế này: Object.keys (băm) .length. false có thể được trả về bởi các lỗi changeAttributes và Object.keys (false), do đó bạn cần một kiểm tra hasChanged trước khi tham chiếu Object.keys trên changedAttributes (hoặc tham chiếu đến model.changed nội bộ). - http://backbonejs.org/#Model-changedAttributes –

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