Les valeurs de l'objet exports doivent être résolues en un nom et une propriété d'une instance UiComponent, séparés par un «:», par exemple checkout.cart.total:title
.
Le nom de la cible d'exportation doit inclure "l'espace de noms" du composant UI.
Dans votre exemple, vous définissez la valeur sur une chaîne, qui se résout en une propriété de l'UiComponent qui est la source d'exportation. L'exportation n'est pas définie lorsque vous l'inspectez car il ne s'agit pas d'une cible d'exportation valide.
Voici un exemple qui fonctionne:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Ce qui précède copiera la valeur de la shouldShowMessage
propriété dans la propriété showMessage
d'un UiComponent avec le nom complet foo.bar
chaque fois que la valeur change.
Notez que cela ne rendra pas automatiquement la propriété cible également observable KO. Cela doit être déclaré explicitement, si les changements de valeur doivent déclencher KO pour rediriger les nœuds DOM qui accèdent à cette propriété.
Soit dit en passant, l'ajout shouldShowMessage
à l' tracks
objet en fera un ko-es5 observable automatiquement. L'utilisation d'un littéral ko.observable()
fonctionne aussi.
Dans l'exemple ci-dessus, le exportTarget
et exportTargetProperty
sont configurés dans le defaults
. Ils pourraient également être spécifiés dans le cadre des options UiComponent dans le JSON, ce qui est généralement plus logique, car c'est là que la hiérarchie UiComponent comprenant les noms UiComponent est définie.
Enfin, je voudrais noter que je pense personnellement que votre solution utilisant un objet de valeur pour transmettre la valeur à l'autre composant d'interface utilisateur est meilleure que d'utiliser des exportations ou des importations. D'après mon expérience, le maintien de l'état partagé dans le DOM ou dans UiComponents est une recette de spaghetti OOP dans tous les cas, sauf les plus simples.
tracks
, la souscription manuelle à observables ne fonctionne plusthis.shouldShowMessage.subscribe is not a function
lors de l'utilisation.this.shouldShowMessage.subscribe(function() { ... });
Cela fonctionne bien lors de la configuration des observables de toute autre manière. Sent comme si je manque une étape outracks
ne crée pas un observable de la même manière.ko.getObservable(this, 'shouldShowMessage').subscribe(function(newValue) { ...});
(le premier argument est le viewmodel (this
), le second le nom de la propriété suivie. Plus d'infos ici: github.com/SteveSanderson/knockout-es5