3

У меня есть что-то вроде этого:Двунаправленный связывание атрибутов данных с Нокаут

Html:

<label id="CustomerName" data-bind="text: name, attr: {'data-value': name}"></label> 

Сценарий:

var viewModel = { 
    name : ko.observable("Original Name"); 
} 

ko.applyBindings(viewModel); 

Я хочу, чтобы иметь возможность изменить атрибут данных программно с помощью jQuery.

$("#CustomerName").data("value", "NewName"); 

После изменения значения атрибута данных, я не вижу, мои изменения обратно в связанном свойстве ViewModel.

Является ли обычное поведение нокаутом невозможным синхронизировать свойства модели просмотра, связанные с атрибутом данных?

Если атрибут data не является двунаправленным, что было бы лучшим способом сделать это? Скрытое поле ??? Вы понимаете, что я не хочу вводить поле ввода, например текстовое поле? Да! Ahhh ok, ... :)

спасибо.

ответ

0

Если вы изменяете значение в JQuery за пределами вашей модели представления нокаута, вы должны сделать следующее:

$('#CustomerName').val('NewName'); // Works the same way as your example 
$('#CustomerName').change(); 

С Нокаут подписывается на событие изменения() на своих привязок, вы должны запустите событие change(), чтобы Knockout знал, что он изменился. Вам не нужен атрибут «data-», просто привяжите текст к наблюдаемому в вашей модели просмотра, нокаут позаботится об остальном.

0

Вы также могли бы получить данные для элемента с:

ko.dataFor($("#CustomerName")[0])("NewName") 

И установить его так.

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

Смежные вопросы