Подтвердить что ты не робот

Ночное наблюдаемое поле, не обновляющееся при изменении входного значения

Я заметил, что я не могу получить некоторые из обучающих руководств 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 изменится при изменении текста во входном файле, однако это не так. Может кто-нибудь объяснить, почему это не работает? (Этот код был в значительной степени скопирован из документации на веб-сайте)

Спасибо, Алекс.

4b9b3361

Ответ 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" />

Он выполняет две важные вещи:

  • сделать немедленные обновления
  • обрабатывает различия браузера для вырезания, перетаскивания, автозаполнения...