KnockoutJS”;“已检查”;绑定不'不能使用observableArray和单选按钮列表
KnockoutJS "checked" binding doesn't work with observableArray and radio button lists
我有一个名为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
});
相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- JS可以在Chrome中工作,但不能在Firefox中工作
- 砌体不能填补小缺口
- javascript扫雷器floodfill算法不能正常工作
- JavaScript指令不能像我想象的那样工作
- 为什么在这个网站上不能通过JS访问元素
- Facebook登录按钮没有'不能在Firefox上工作
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- AngularJS:$q.dedefe()不能由工厂方法共享
- 不能在同一页上进行多个jquery幻灯片切换
- 不能在图像中的地图标记中使用花式框jquery插件的区域标记
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- javascript没有´我不能在joomla 3.0中工作
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 用javascript将script元素附加到头部;铬不能工作