我有类似的东西:
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的链接属性中看不到我的更改。
Knockout的正常行为是不同步绑定到数据属性的viewmodel属性吗?
如果数据属性不是双向的,那么最好的方法是什么?隐藏的领域?你明白我不想像文本框那样输入字段吗?是啊!啊,好吧,...... :)
谢谢。
答案 0 :(得分:0)
如果您在Knockout视图模型之外更改jQuery中的值,则必须执行以下操作:
$('#CustomerName').val('NewName'); // Works the same way as your example
$('#CustomerName').change();
由于Knockout在其绑定上订阅了change()事件,因此必须触发change()事件,以便Knockout知道它已更改。您不需要“data-”属性,只需将文本绑定到视图模型上的observable,Knockout会处理其余部分。
答案 1 :(得分:0)
您还可以使用以下内容获取元素的数据:
ko.dataFor($("#CustomerName")[0])("NewName")
并设置它。
我建议您为此创建一个bindingHandler,它保持数据属性和值的同步。您可以挂钩属性的change事件并更新observable。