Значення об’єкта експорту повинні відповідати імені та властивості екземпляра UiComponent, відокремлених, наприклад, ':' checkout.cart.total:title
.
Ім'я цільового експорту повинно містити компонент інтерфейсу "Простір імен".
У вашому прикладі ви встановлюєте значення для рядка, який відповідає властивості UiComponent, що є джерелом експорту. Експорт не визначений, коли ви його перевіряєте, оскільки це не є дійсною ціллю експорту.
Ось приклад, який працює:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Вищенаведене буде копіювати значення shouldShowMessage
властивості у властивість showMessage
UiComponent з повним ім'ям foo.bar
кожного разу, коли значення змінюється.
Зверніть увагу, що це автоматично не зробить цільовий властивість і KO-кодируемым. Це потрібно оголосити явно, якщо зміни значення повинні викликати KO для повторного надання DOM-вузлів, які отримують доступ до цього властивості.
До речі, додавання shouldShowMessage
до tracks
об'єкта зробить його ko-es5 зрозумілим автоматично. Використання буквальних ko.observable()
творів теж.
У наведеному вище прикладі, exportTarget
і exportTargetProperty
налаштовані в defaults
. Вони також можуть бути визначені як частина параметрів UiComponent в JSON, що зазвичай має більше сенсу, оскільки саме там визначається ієрархія UiComponent, включаючи імена UiComponent.
Нарешті, я хотів би зазначити, що я особисто вважаю, що ваше рішення з використанням об'єкта значення для передачі значення іншому компоненту інтерфейсу краще, ніж використання експорту чи імпорту. З мого досвіду, зберігання загального стану в DOM або UiComponents - це рецепт OOP для спагетті у всіх, крім найпростіших випадках.