Nilai-nilai objek ekspor harus menyelesaikan ke nama dan properti instance UiComponent, dipisahkan oleh ':', misalnya checkout.cart.total:title
.
Nama target ekspor harus menyertakan komponen UI "namespace".
Dalam contoh Anda, Anda menetapkan nilai ke string, yang memutuskan ke properti UiComponent yang merupakan sumber ekspor. Ekspor tidak terdefinisi saat Anda memeriksanya karena itu bukan target ekspor yang valid.
Berikut ini contoh yang berfungsi:
defaults: {
exportTarget: "foo.bar",
exportTargetProperty: "showMessage",
tracks: {
shouldShowMessage: true
},
exports: {
shouldShowMessage: '${$.exportTarget}:${$.exportTargetProperty}'
}
}
...
Di atas akan menyalin nilai shouldShowMessage
properti ke properti showMessage
UiComponent dengan nama lengkap foo.bar
setiap kali nilainya berubah.
Perhatikan bahwa ini tidak akan secara otomatis menjadikan properti target KO juga dapat diamati. Itu harus dinyatakan secara eksplisit, jika perubahan nilai harus memicu KO ke rerender DOM node yang mengakses properti itu.
By the way, menambahkan shouldShowMessage
ke tracks
objek akan membuatnya menjadi ko-ES5 diamati otomatis. Menggunakan ko.observable()
karya literal juga.
Pada contoh di atas, exportTarget
dan exportTargetProperty
dikonfigurasikan di defaults
. Mereka juga dapat ditentukan sebagai bagian dari opsi UiComponent di JSON, yang biasanya lebih masuk akal, karena di situlah hierarki UiComponent termasuk nama-nama UiComponent didefinisikan.
Akhirnya, saya ingin mencatat bahwa saya pribadi berpikir solusi Anda menggunakan objek nilai untuk meneruskan nilai ke komponen UI lainnya lebih baik daripada menggunakan ekspor atau impor. Dalam pengalaman saya menjaga keadaan bersama di DOM atau di UiComponents adalah resep untuk spaghetti OOP dalam semua kasus kecuali yang paling sederhana.
tracks
, berlangganan secara manual ke yang dapat diobservasi tidak lagi berfungsithis.shouldShowMessage.subscribe is not a function
saat menggunakannyathis.shouldShowMessage.subscribe(function() { ... });
Ini berfungsi dengan baik saat mengatur yang dapat diamati dengan cara lain. Terasa seolah-olah saya kehilangan langkah atautracks
tidak menciptakan cara yang bisa diamati.ko.getObservable(this, 'shouldShowMessage').subscribe(function(newValue) { ...});
(argumen pertama adalah viewmodel (this
), yang kedua adalah nama properti yang dilacak. Info lebih lanjut di sini: github.com/SteveSanderson/knockout-es5