数据属性与Knockout的双向绑定

时间:2014-01-29 18:06:32

标签: javascript data-binding knockout.js custom-data-attribute

我有类似的东西:

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属性吗?

如果数据属性不是双向的,那么最好的方法是什么?隐藏的领域?你明白我不想像文本框那样输入字段吗?是啊!啊,好吧,...... :)

谢谢。

2 个答案:

答案 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。