Contoh knockout js ini berfungsi saat Anda mengedit bidang dan menekan TAB, viewmodel data dan karenanya teks di bawah bidang diperbarui.
Bagaimana saya bisa mengubah kode ini agar data model view diperbarui setiap kali tombol ditekan?
<!doctype html>
<html>
<title>knockout js</title>
<head>
<script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>
<script type="text/javascript">
window.onload= function() {
var viewModel = {
firstName : ko.observable("Jim"),
lastName : ko.observable("Smith")
};
viewModel.fullName = ko.dependentObservable(function () {
return viewModel.firstName() + " " + viewModel.lastName();
});
ko.applyBindings(viewModel);
}
</script>
</head>
<body>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
</body>
</html>
javascript
knockout.js
Edward Tanguay
sumber
sumber
Jawaban:
Dari dokumentasi
sumber
afterkeydown
adalah solusi yang buruk.Dalam versi 3.2 Anda cukup menggunakan pengikatan input teks. :
Ia melakukan dua hal penting:
Jadi tidak perlu modul tambahan, kontrol khusus dan hal-hal lain.
sumber
Jika Anda ingin melakukan pembaruan pada
afterkeydown
"secara default," Anda bisa menyuntikkanvalueUpdate
pengikatan dalamvalue
pengikat yang mengikat. Cukup sediakan yang baruallBindingsAccessor
untuk digunakan pawang yang menyertakannyaafterkeydown
.Jika Anda tidak nyaman "mengesampingkan"
value
pengikatan, Anda bisa memberikan pengubah pengikatan nama yang berbeda dan menggunakan penangan yang mengikat itu.demo
Solusi seperti ini akan cocok untuk versi Knockout 2.x. Tim Knockout telah menyempurnakan pengikatan untuk input seperti teks melalui pengikatan teksInput di Knockout versi 3 dan lebih tinggi. Itu dirancang untuk menangani semua metode input teks untuk input teks dan
textarea
. Bahkan akan menangani pembaruan waktu nyata yang secara efektif menjadikan pendekatan ini usang.sumber
Jawaban Jeff Mercado luar biasa, tetapi sayangnya rusak dengan Knockout 3.
Tapi saya menemukan jawaban yang disarankan oleh ko devs saat bekerja melalui perubahan Knockout 3. Lihat komentar bawah di https://github.com/knockout/knockout/pull/932 . Kode mereka:
http://jsfiddle.net/mbest/GKJnt/
Edit Ko 3.2.0 sekarang memiliki solusi yang lebih lengkap dengan ikatan "textInput" yang baru. Lihat jawaban SalvidorDali
sumber