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

Динамически связанные элементы с applyBindingsToNode не реагируют на изменения

В этом примере у меня есть динамически связанный вход и div в одно и то же свойство. Но при изменении текста на входе изменения не отражаются в элементе div.

http://jsfiddle.net/rpuri/Bcps5/

ko.applyBindingsToNode(document.getElementById('input-health'), {
    value: vm.status(),
    valueUpdate: 'afterkeydown'
});

Декларативное связывание не является вариантом для меня, потому что мне нужно связать с общими элементами в частичных представлениях (ASP.NET MVC).

Спасибо

4b9b3361

Ответ 1

Вы привязываетесь к значению наблюдаемого вместо наблюдаемого.

Try:

ko.applyBindingsToNode(document.getElementById('health'), {
    text: vm.status, // <- not invoking status, binding to the observable itself.
    valueUpdate: 'keydown'
});

ko.applyBindingsToNode(document.getElementById('input-health'), {
    value: vm.status,  
    valueUpdate: 'keydown'
});

http://jsfiddle.net/hwQsm/

Ответ 2

Я использовал функцию препроцесса (нокаут 3).

<input type="text" data-bind="value: LastName, vuClass: 'text'" />

ko.bindingHandlers.vuClass = {
    preprocess: function (value, name, addBindingCallback) {
        if (value == "'text'") {
            addBindingCallback('valueUpdate', "['afterkeydown', 'blur']");
        }

        // ...
        // Check other values.
        // ...

        return value;
    }
};