KnockoutJS”;“已检查”;绑定不'不能使用observableArray和单选按钮列表

KnockoutJS "checked" binding doesn't work with observableArray and radio button lists

本文关键字:不能 observableArray 单选按钮 列表 检查 已检查 KnockoutJS 绑定      更新时间:2023-09-26

我有一个名为SelectedAttributeValueIds的observableArray,需要使用"checked"绑定将其绑定到单选按钮列表。例如

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

然而,KnockoutJS正在用一个仅可观测的值替换observableArray。因此,SelectedAttributeValueId的值不是[123],而是"123"

我这样做是为了解决问题,但我想知道是否有更简单的方法:

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

对于单选按钮,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
});