KnockoutJS“checked”绑定不适用于observableArray和单选按钮列表

时间:2012-02-22 16:57:23

标签: javascript html5 knockout.js

我有一个名为SelectedAttributeValueIds的observableArray,我需要使用“checked”绑定将其绑定到单选按钮列表。 e.g。

<input type="radio" data-bind="checked: SelectedAttributeValueIds" />

然而,KnockoutJS正在用一个只能观察的值替换observableArray。因此,而不是具有值[123]的SelectedAttributeValueIds,它将是“123”

我这样做是一种解决方法但是想知道是否有更简单的方法:

<input type="radio" data-bind="event: { change: function() { $parent.SelectedAttributeValueIds([$data.ID()]); } }" />

1 个答案:

答案 0 :(得分:2)

对于单选按钮,KO假定只有一个“值”可以写入。对于复选框,它将添加/删除数组中的值。

听起来你想要总是写一个值,但是把它作为唯一元素放在一个数组中。

一种选择是创建ko.computed来表示数组中的项目。另一种选择是使用可写的ko.computed来绑定输入,并让它代理所需格式之间的值。类似的东西:

this.SelectedAttributeValueIds = ko.observableArray();
this.SelectedAttributeValueId = ko.computed({
   read: function() {
       var values = this.SelectedAttributeValueIds();
       return values.length ? values[0] : [];
   },
   write: function(newValue) {
       this.SelectedAttributeValueIds([newValue]);
   },
   owner: this
});