Các giá trị của đối tượng xuất khẩu phải phân giải thành tên và thuộc tính của một thể hiện UiComponent, được phân tách bằng dấu ':', chẳng hạn checkout.cart.total:title
.
Tên mục tiêu xuất khẩu phải bao gồm "không gian tên" thành phần UI.
Trong ví dụ của bạn, bạn đặt giá trị thành một chuỗi, phân giải thành thuộc tính của UiComponent là nguồn xuất. Việc xuất không được xác định khi bạn kiểm tra nó vì đó không phải là mục tiêu xuất hợp lệ.
Đây là một ví dụ hoạt động:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Ở trên sẽ sao chép giá trị của shouldShowMessage
tài sản vào thuộc tính showMessage
của UiComponent với tên đầy đủ foo.bar
mỗi khi giá trị thay đổi.
Lưu ý rằng điều này sẽ không tự động làm cho thuộc tính mục tiêu trở thành KO có thể quan sát được. Điều đó phải được khai báo rõ ràng, nếu thay đổi giá trị sẽ kích hoạt KO để đăng ký lại các nút DOM truy cập thuộc tính đó.
Nhân tiện, thêm shouldShowMessage
vào tracks
đối tượng sẽ làm cho nó có thể quan sát tự động ko-es5. Sử dụng một ko.observable()
tác phẩm theo nghĩa đen , quá.
Trong ví dụ trên, exportTarget
và exportTargetProperty
được cấu hình trong defaults
. Chúng cũng có thể được chỉ định là một phần của các tùy chọn UiComponent trong JSON, thường có ý nghĩa hơn, vì đó là nơi phân cấp UiComponent bao gồm các tên UiComponent được xác định.
Cuối cùng, tôi muốn lưu ý rằng cá nhân tôi nghĩ rằng giải pháp của bạn sử dụng một đối tượng giá trị để truyền giá trị cho thành phần UI khác tốt hơn là sử dụng xuất hoặc nhập. Theo kinh nghiệm của tôi, việc giữ trạng thái chia sẻ trong DOM hoặc trong UiComponents là một công thức cho spaghetti OOP trong tất cả các trường hợp trừ những trường hợp đơn giản nhất.