tôi đã nhận thấy rằng khi nhiều thuộc tính của một mô hình Backbone được thiết lập như vậyLàm cách nào để giới hạn sự kiện thay đổi số khi nhiều thuộc tính được đặt?
model.set({
att1:val1,
att2:val2
});
hai sự kiện thay đổi được kích hoạt. Tôi đã giả định sai rằng chỉ có một sự kiện thay đổi sẽ được kích hoạt sau khi tất cả các thuộc tính đã được đặt.
Điều này có vẻ không phải là vấn đề, nhưng đó là khi hàm bị ràng buộc với att1 cũng sử dụng giá trị của att2. Nói cách khác, khi bạn làm điều này
model.bind('change:att1', func1);
...
func1 = function() {
var att2 = model.get('att2');
}
biến att2 sẽ được đặt thành giá trị cũ của thuộc tính att2 của mô hình.
Câu hỏi đặt ra là cách ngăn chặn điều này một cách thanh lịch. Tất nhiên, một lựa chọn là đặt att2 trước khi đặt att1 hoặc để liên kết với att2 (thay vì att1), nhưng có vẻ như đây chỉ là một lựa chọn khả thi trong các tình huống đơn giản. Tùy chọn thứ hai cũng giả định rằng các thuộc tính được thiết lập theo thứ tự mà chúng được liệt kê trong phương thức set (đó là trường hợp tôi nghĩ).
Tôi đã gặp vấn đề này nhiều lần do đó câu hỏi của tôi. Vấn đề là nó đã cho tôi một thời gian để nhận ra những gì đã thực sự xảy ra.
Lưu ý cuối cùng, giống như bạn có thể chuyển {im lặng: true} như là một tùy chọn của phương pháp đã đặt, sẽ thật tuyệt khi có tùy chọn {group: true} (hoặc cái gì đó tương tự) cho biết rằng thay đổi các sự kiện chỉ nên được kích hoạt sau khi tất cả các thuộc tính đã được thiết lập.
Cảm ơn bạn đã nhập, Sander. Ban đầu tôi đã sử dụng một sự kiện tùy chỉnh, nhưng tôi đã tự hỏi liệu có một tùy chọn để "nhóm" thay đổi các sự kiện khi khi nhiều thuộc tính được đặt cùng một lúc hay không. Dựa trên câu trả lời của bạn, tôi cho rằng câu trả lời là không. Trên một lưu ý phụ, sự kiện tùy chỉnh là một lựa chọn mạnh mẽ thực sự. –
tôi đã thêm tùy chọn sử dụng sự kiện thay đổi toàn cầu, sau khi tìm ra nó kích hoạt sau khi attributechang được kích hoạt – Sander
Cảm ơn rất nhiều, Sander. Điều này làm rõ vấn đề hoàn toàn. –