Saya telah menulis beberapa binding kustom menggunakan KnockoutJS. Saya masih tidak yakin kapan harus menggunakan ko.utils.unwrapObservable(item)
Melihat kode, panggilan itu pada dasarnya memeriksa untuk melihat apakah item
dapat diamati. Jika ya, kembalikan nilai (), jika tidak, kembalikan nilainya. Melihat bagian di Knockout tentang membuat binding kustom, mereka memiliki sintaks berikut:
var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
Dalam hal ini, mereka memanggil yang dapat diamati melalui ()
tetapi kemudian juga memanggil ko.utils.unwrapObservable
. Saya hanya mencoba untuk mengetahui kapan harus menggunakan satu vs. yang lain atau jika saya harus selalu mengikuti pola di atas dan menggunakan keduanya.
ko.toJS(yourObject)
daripada menggunakanko.utils.unwrapObservable
, jika Anda mencoba untuk mendapatkan versi yang tidak terbungkus dari objek untuk diteruskan ke widget atau pustaka pihak ketiga. Secara umum, ini paling aman digunakanko.utils.unwrapObservable
untuk mendukung yang dapat diamati dan yang tidak dapat diamati.ko.utils.unwrapObservable
. Melihat kodenya, itu hanya memeriksa untuk melihat apakah itu dapat diamati dan jika ya, Knockout memanggil()
untuk mendapatkan nilai yang dapat diamati, jika tidak, itu hanya mengembalikan nilai untuk yang tidak dapat diamati. Jika yang saya minati hanyalah nilai data yang diteruskan ke pengikatan, mengapa saya tidak bisa selalu menggunakan()
?myBinding
dan seseorang mengikat sepertidata-bind="myBinding: myValue"
.myValue
mungkin dapat diamati atau mungkin hanya properti biasa pada model tampilan. Jika ini hanya properti dan saya menyebutnya seperti fungsi, maka Anda akan mendapatkan error.ko.utils.unwrapObservable
akan dengan aman mengembalikan nilai kepada Anda terlepas dari apakah Anda lulus pengamatan atau tidak.ko.unwrap
tersedia dalam versi 3.0+. Jika Anda menggunakan lebih lama dari 3.0, makako.utils.unwrapObservable
masih ada.Jawaban sebelumnya benar, tetapi sering kali saya meneruskan fungsi ke pengikatan khusus (fungsi yang memeriksa izin, atau menentukan apa yang harus dilakukan berdasarkan hal lain, dll). Yang benar-benar saya butuhkan adalah membuka bungkus fungsi apa pun, meskipun itu bukan sebuah observasi.
Berikut ini secara rekursif membuka SEMUANYA:
Berikut adalah contoh penjilidan kustom sederhana yang saya tulis:
Dengan cara ini bindingValue selalu berisi nilai. Saya tidak perlu khawatir tentang apakah saya meneruskan fungsi, yang dapat diamati, nilai, atau bahkan fungsi di dalam yang dapat diamati. Ini akan membuka semuanya dengan benar sampai mencapai objek yang saya inginkan.
Harapan yang membantu seseorang.
sumber