2013-06-07 15 views
8

Tôi đang gặp sự cố khi thêm bộ mở rộng loại trực tiếp vào các quan sát sau khi chúng được tạo. Trong ví dụ sau, trình mở rộng được chạy trên foo mỗi khi giá trị thay đổi như mong đợi nhưng chỉ một lần, khi được gọi đầu tiên, cho bar.Áp dụng bộ mở rộng loại bỏ sau khi ánh xạ

var viewModel = function(){ 
    var self = this; 

    self.foo = ko.observable(1).extend({ numeric: 1 }); 

    self.bar = ko.observable(1); 

    self.bar.extend({ numeric: 1 }); 
}; 

Về bản chất tôi đang ánh xạ một đối tượng JSON lớn và muốn thêm bộ mở rộng sau khi ánh xạ xảy ra với một số thuộc tính. Có một cách đơn giản để làm điều này?

Dưới đây là một jsfiddle cho thấy vấn đề:

http://jsfiddle.net/LgxTn/

Trả lời

8

Vấn đề bạn có là extender đang tạo ra một mới quan sát được (dựa trên các quan sát được nó mở rộng). Và đó là quan sát mới không được sử dụng trong cuộc gọi thứ hai của bạn để extend.

Để sửa lỗi này (mà không thay đổi mã của extender), bạn có thể gán phản hồi từ gọi extendvào bất động sản cùng nó được gọi là.

Nói cách khác, thêm self.bar = trước dòng cuối cùng của bạn để có điều này:

self.bar = self.bar.extend({ numeric: 1 }); 
+0

Giải pháp này không phản ứng trên mẫu tái render cho phụ quan sát. Hãy thử http://knockoutjs.com/documentation/extenders.html Ví dụ trực tiếp này 2. – hawk

+0

Tôi không biết ý của bạn là gì. OP và tôi dựa trên mã của chúng tôi trong cùng một 'ko.extenders.numeric' được đăng trên trang tài liệu đó. Xin vui lòng gửi một câu trả lời mới nếu cách tiếp cận của bạn là đáng kể khác với tôi. –

+0

Có lẽ tôi hiểu nhầm điều gì đó nhưng điều này không hoạt động như mong đợi, hãy kiểm tra http://jsfiddle.net/BqXed/ – hawk

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