2013-04-11 34 views
17

Đó là một tính năng đã biết của backbone.js khi bạn thiết lập dữ liệu không thay đổi, nó sẽ không kích hoạt sự kiện thay đổi, cũng như không thông qua xác thực. Tuy nhiên, tôi cần sự kiện thay đổi để kích hoạt khi tôi lưu trữ một phản hồi JSON từ một cuộc gọi AJAX lưu trữ kết quả xác nhận hợp lệ phụ trợ. Nếu người dùng tiếp tục gửi biểu mẫu trong khi để trống trường đó, xác nhận hợp lệ phụ trợ sẽ trả lại kết quả JSON giống nhau và khi tôi lưu nó vào mô hình, nó sẽ không kích hoạt sự kiện thay đổi.Kích hoạt backbone.js thay đổi khi giá trị không thay đổi

Một vài điều tôi đã cố gắng trong callback thành công AJAX nơi tôi đặt dữ liệu vào mô hình:

Solution Đã cố gắng # 1

t.model.unset('fieldErrors',{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

Đã cố gắng Giải pháp # 2

t.model.set({fieldErrors: null},{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

Không có kết quả nào trong sự kiện thay đổi này kích hoạt lần thứ hai khi cuộc gọi được thực hiện và người dùng có cùng JSONResponse.

+0

Nếu bạn không sợ soạn sẵn, xem câu trả lời ScottPuleo của. Nếu không, bạn có thể ghi đè phương thức 'Model # set' để luôn kích hoạt sự kiện tùy chỉnh (tôi sẽ đăng câu trả lời về cách bạn quan tâm). – Loamhoof

Trả lời

27

Kích hoạt sự kiện thay đổi:

t.model.trigger('change', t.model); 

hoặc

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue); 
+5

Trường hợp thứ hai (của một tùy chọn ngẫu nhiên) có lẽ sẽ không bao giờ được sử dụng. Phương thức 'trigger' là tất cả những gì cần thiết ở đây. Hãy nhớ để vượt qua các thông số cần thiết như xương sống sẽ không làm điều đó cho bạn khi bạn tự kích hoạt. –

+2

Lưu ý: "Trường hợp thứ hai" đề cập đến trường hợp cũ đã bị xóa. – Chris

+0

@Scott Puleo Đây là một câu hỏi cũ nhưng tôi đã tự hỏi nếu bạn có thể giải thích lý do tại sao chúng ta cần phải vượt qua mô hình chính nó như là một đối số thứ hai để 'kích hoạt'? Khi tôi không, 'Collection._onModelEvent' - được gọi sau - không nhận được mô hình. Dường như với tôi rằng 'model.trigger ('change')' nên đủ để chuyển tiếp mô hình cho sự kiện sau này. Bạn có biết tại sao nó không? (xin lỗi nếu câu hỏi của tôi là không rõ ràng ...) – arnaudrg

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