Этот пример нокаута js работает так, что когда вы редактируете поле и нажимаете клавишу TAB, данные модели представления и, следовательно, текст под полями обновляются.
Как я могу изменить этот код так, чтобы данные viewmodel обновлялись при каждом нажатии клавиши?
<!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
Эдвард Тангей
источник
источник
Ответы:
Из документации
источник
afterkeydown
это плохое решение.В версии 3.2 вы можете просто использовать привязку textinput. :
Это делает две важные вещи:
Поэтому нет необходимости в дополнительных модулях, пользовательских элементах управления и прочем.
источник
Если вы хотите, чтобы он обновлял
afterkeydown
«по умолчанию», вы можете вставитьvalueUpdate
привязку вvalue
обработчик привязки. Просто предоставьте новыйallBindingsAccessor
обработчик для использования, который включает в себяafterkeydown
.Если вам неудобно «переопределять»
value
привязку, вы можете присвоить переопределенной пользовательской привязке другое имя и использовать этот обработчик привязки.демонстрация
Такое решение подойдет для Knockout версии 2.x. Команда Knockout разработала более полную привязку для текстовых вводов через привязку textInput в Knockout версии 3 и выше. Он был разработан для обработки всех методов ввода текста для ввода текста и
textarea
. Он даже будет обрабатывать обновления в реальном времени, что делает этот подход устаревшим.источник
Ответ Джеффа Меркадо фантастический, но, к сожалению, он не работает с нокаутом 3.
Но я нашел ответ, предложенный разработчиками ко при работе с изменениями Knockout 3. Смотрите нижние комментарии на https://github.com/knockout/knockout/pull/932 . Их код:
http://jsfiddle.net/mbest/GKJnt/
Edit Ko 3.2.0 теперь имеет более полное решение с новой привязкой textInput. Смотрите ответ SalvidorDali
источник