Tôi đã viết một vài ràng buộc tùy chỉnh bằng KnockoutJS. Tôi vẫn không chắc chắn khi sử dụng ko.util.unwrapObservable(item)
Nhìn vào mã, cuộc gọi đó về cơ bản kiểm tra xem liệu item
có phải là một quan sát hay không. Nếu có, hãy trả về giá trị(), nếu không, chỉ trả về giá trị. Nhìn vào phần trên Knockout về việc tạo ra các ràng buộc tùy chỉnh, họ có cú pháp như sau:Khi nào nên sử dụng ko.utils.unwrapObservable?
var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
Trong trường hợp này, họ gọi thể quan sát được qua ()
nhưng sau đó cũng gọi ko.utils.unwrapObservable
. Tôi chỉ cố gắng để có được một xử lý về khi sử dụng một so với khác hoặc nếu tôi chỉ nên luôn luôn làm theo các mô hình trên và sử dụng cả hai.
Vì vậy, đây là mô hình mà tôi đã đăng thực hành tốt nhất cho các ràng buộc tùy chỉnh về sau? – arb
Nó thực sự phụ thuộc vào tình hình. Một số ràng buộc tùy chỉnh được thiết kế để chỉ làm việc với các quan sát, vì vậy bạn có thể kiểm tra phía trước (ko.isObservable) rằng nó là một quan sát và sau đó bạn sẽ được tự do để unwrap nó với(). Nếu bạn đang nhận một đối tượng có thể có các quan sát lồng nhau, thì tốt hơn bạn nên thực hiện 'ko.toJS (yourObject)' thay vì sử dụng 'ko.utils.unwrapObservable', nếu bạn đang cố gắng lấy một phiên bản chưa được mở của đối tượng để chuyển vào một tiện ích hoặc thư viện của bên thứ ba. Nói chung, an toàn nhất là sử dụng 'ko.utils.unwrapObservable' để hỗ trợ các quan sát và không quan sát được. –
Tôi đoán tôi đang bối rối với mục đích của 'ko.utils.unwrapObservable' là gì. Nhìn vào mã, nó chỉ kiểm tra xem nó có thể quan sát được hay không, Knockout gọi '()' để nhận giá trị của quan sát, ngược lại, nó chỉ trả về giá trị cho không quan sát được. Nếu tất cả những gì tôi quan tâm là giá trị của dữ liệu được truyền vào trong ràng buộc, tại sao tôi không thể luôn luôn sử dụng '()'? – arb