导出对象的值必须解析为UiComponent实例的名称和属性,例如以':'分隔checkout.cart.total:title
。
导出目标名称必须包含UI组件“名称空间”。
在您的示例中,您将值设置为字符串,该字符串解析为作为导出源的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
。也可以将它们指定为JSON中UiComponent选项的一部分,这通常更有意义,因为这是定义包括UiComponent名称的UiComponent层次结构的地方。
最后,我想指出一点,我个人认为使用值对象将值传递给其他UI组件的解决方案比使用导出或导入更好。以我的经验,在最简单的情况下,保持DOM或UiComponents中的共享状态是通心粉OOP的秘诀。