2011-10-21 26 views
5

Giả sử tôi có một ViewModel với 100 đạo cụ. Hiện tại tôi cần một trình xử lý sẽ được gọi nếu có bất kỳ thay đổi nào về đạo cụ. Tất nhiên tôi có thể viết 100.đăng ký cho mỗi tài sản, nhưng có vẻ như, rằng có một cách tốt hơn. Giống như trong C#, nơi bạn có thể liên kết với sự kiện PropertyChanged của mô hình, và sau đó chọn các thuộc tính quan tâm theo tên của chúng.knockoutjs: làm thế nào để có được thông báo cho tất cả các thuộc tính một lần

Trả lời

8

Câu trả lời chung là tạo ra một người phụ thuộcBảo hộ được đăng ký mọi thứ. Điều này có thể dễ dàng thực hiện bằng cách thực hiện một bên trong của một thuộc tính có thể phục vụ, vì nó sẽ đệ quy unwrap tất cả các quan sát. Bạn sẽ muốn thận trọng để không bao gồm chính mình trong cuộc gọi ko.toJS hoặc bạn có thể tham gia vào vòng lặp vô hạn.

Nếu bạn đang tìm kiếm thứ gì đó có chức năng hơn một chút, hãy xem post này.

+0

Cảm ơn, bài viết này có ý nghĩa tốt. Bạn có biết cách tôi có thể tìm thấy tài sản cụ thể nào đã kích hoạt thay đổi không? –

+0

Thực hiện theo dõi thay đổi phức tạp hơn. Đây là một ví dụ về cách nó có thể hoạt động: http://jsfiddle.net/rniemeyer/5bxLr/. Chức năng "onPropertyChanged" có thể được tùy chỉnh hoặc ai đó có thể vượt qua trong đó. –

1

Tôi nghĩ bạn đang sử dụng KO 1.2.1. Nó không phải là dễ dàng như vậy trong phiên bản này. Tuy nhiên Knockout 1.3 đang đến. Hiện tại nó là phiên bản beta nhưng nó khá ổn định. Điều chỉnh đã được thực hiện trong Knockout 1.3. Tôi nghĩ rằng đây là những gì bạn cần.

Bạn có thể đọc thêm về 1.3 phiên bản ở đây: http://blog.stevensanderson.com/2011/08/31/knockout-1-3-0-beta-available/

Và kiểm tra mẫu trên mạng: http://jsfiddle.net/StevenSanderson/Rnmb2/1/

Có lẽ tôi có thể giúp bạn với thực hiện trong trường hợp bạn cần một số trợ giúp.

Tôi hy vọng đó chính xác là những gì bạn cần.

+0

Tôi sử dụng phiên bản 1.3.0 beta, nhưng tôi không thấy vấn đề của mình tương quan như thế nào với điều chỉnh. –

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