Los valores del objeto de exportación deben resolverse en un nombre y una propiedad de una instancia de UiComponent, separados por un ':', por ejemplo checkout.cart.total:title
.
El nombre del objetivo de exportación debe incluir el "espacio de nombres" del componente de la interfaz de usuario.
En su ejemplo, establece el valor en una cadena, que se resuelve en una propiedad del componente Ui que es la fuente de exportación. La exportación no está definida cuando la inspecciona porque ese no es un objetivo de exportación válido.
Aquí hay un ejemplo que funciona:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Lo anterior copiará el valor de la shouldShowMessage
propiedad en la propiedad showMessage
de un UiComponent con el nombre completo foo.bar
cada vez que cambie el valor.
Tenga en cuenta que esto no hará que la propiedad de destino sea también un KO observable automáticamente. Eso tiene que declararse explícitamente, si los cambios de valor desencadenan que KO vuelva a generar nodos DOM que acceden a esa propiedad.
Por cierto, agregar shouldShowMessage
al tracks
objeto lo hará un ko-es5 observable automáticamente. Usar un trabajo literal ko.observable()
también.
En el ejemplo anterior, exportTarget
y exportTargetProperty
se configuran en defaults
. También podrían especificarse como parte de las opciones de UiComponent en el JSON, lo que generalmente tiene más sentido, ya que allí es donde se define la jerarquía de UiComponent, incluidos los nombres de UiComponent.
Finalmente, me gustaría señalar que personalmente creo que su solución usando un objeto de valor para pasar el valor al otro componente de la interfaz de usuario es mejor que usar exportaciones o importaciones. En mi experiencia, mantener el estado compartido en el DOM o en UiComponents es una receta para spaghetti OOP en todos los casos, excepto en los más simples.
tracks
, suscribirse manualmente a observables ya no funcionathis.shouldShowMessage.subscribe is not a function
cuando se usa.this.shouldShowMessage.subscribe(function() { ... });
Funciona bien al configurar observables de otra manera. Parece que me falta un paso otracks
no crea un observable de la misma manera.ko.getObservable(this, 'shouldShowMessage').subscribe(function(newValue) { ...});
(el primer argumento es viewmodel (this
), el segundo el nombre de la propiedad rastreada. Más información aquí: github.com/SteveSanderson/knockout-es5