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 shouldShowMessageproperti ke properti showMessageUiComponent dengan nama lengkap foo.barsetiap 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 shouldShowMessageke tracksobjek akan membuatnya menjadi ko-ES5 diamati otomatis. Menggunakan ko.observable()karya literal juga.
Pada contoh di atas, exportTargetdan exportTargetPropertydikonfigurasikan 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.