I valori dell'oggetto export devono essere risolti in un nome e una proprietà di un'istanza UiComponent, separati da un ':', ad esempio checkout.cart.total:title
.
Il nome della destinazione di esportazione deve includere lo "spazio dei nomi" del componente UI.
Nel tuo esempio, imposti il valore su una stringa, che si risolve in una proprietà di UiComponent che è l'origine di esportazione. L'esportazione non è definita quando la si ispeziona perché non si tratta di una destinazione di esportazione valida.
Ecco un esempio che funziona:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Quanto sopra copierà il valore della shouldShowMessage
proprietà nella proprietà showMessage
di un UiComponent con il nome completo foo.bar
ogni volta che il valore cambia.
Si noti che ciò non renderà automaticamente osservabile anche la proprietà target. Ciò deve essere dichiarato esplicitamente, se le modifiche al valore devono attivare KO per il rendering dei nodi DOM che accedono a quella proprietà.
A proposito, aggiungendo shouldShowMessage
alla tracks
oggetto renderà un ko-ES5 automagically osservabile. Usare anche ko.observable()
opere letterali .
Nell'esempio sopra, exportTarget
e exportTargetProperty
sono configurati in defaults
. Potrebbero anche essere specificati come parte delle opzioni UiComponent in JSON, il che di solito ha più senso, poiché è qui che vengono definite la gerarchia di UiComponent che include i nomi UiComponent.
Infine, vorrei notare che personalmente ritengo che la soluzione che utilizza un oggetto valore per passare il valore all'altro componente dell'interfaccia utente sia migliore dell'utilizzo di esportazioni o importazioni. Nella mia esperienza, mantenere lo stato condiviso nel DOM o in UiComponents è una ricetta per spaghetti OOP in tutti tranne che nei casi più semplici.