Ночное наблюдаемое поле, не обновляющееся при изменении входного значения
Я заметил, что я не могу получить некоторые из обучающих руководств Knockout live или базовые примеры, которые должны демонстрировать привязку привязываемых данных.
Вот мой код:
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8" />
<title>Testing</title>
<script type="text/javascript" src="knockout.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function TestViewModel() {
this.Name = ko.observable("Testing");
}
$(function() {
ko.applyBindings(new TestViewModel());
});
</script>
</head>
<body>
<h1>Testing Knockout.js</h1>
<div>
<div>
<span data-bind="text: Name"></span>
</div>
<div>
<input type="text" data-bind="value: Name"></input>
</div>
</div>
</body>
</html>
Поэтому, когда я открываю это в Google Chrome или Firefox, я ожидаю, что значение тега span изменится при изменении текста во входном файле, однако это не так. Может кто-нибудь объяснить, почему это не работает? (Этот код был в значительной степени скопирован из документации на веб-сайте)
Спасибо,
Алекс.
Ответы
Ответ 1
В версии KO версии 3.2 (как в ответе Сальвадора Дали указано), вы должны использовать textinput
привязка для мгновенного обновления:
<input data-bind="textInput: userName" />
Если вы используете более раннюю версию нокаута и привязку value
, то вы должны внести следующие изменения:
По умолчанию нокаут обновляет значение наблюдаемых в событии изменения (например, когда фокус текстового поля теряется).
Если вам требуется мгновенное обновление, вам нужно указать опцию valueUpdate
, где возможны следующие события: keyup
, keypress
, afterkeydown
см. дополнительную информацию в documentation.
Итак, измените привязку value
:
<input type="text" data-bind="value: Name, valueUpdate: 'afterkeydown'"></input>
Демо JSFiddle.
Ответ 2
Принятый ответ правильный, но в новой версии KO 3.2 они добавили привязку textinput. Поэтому вместо привязки value
вы можете использовать textInput
:
<input data-bind="textInput: userName" />
Он выполняет две важные вещи:
- сделать немедленные обновления
- обрабатывает различия браузера для вырезания, перетаскивания, автозаполнения...