将 checkedValue 绑定与单选按钮一起使用
Using checkedValue binding with radio buttons
我正在尝试使用淘汰版 3 中引入的 checkedValue 绑定,带有单选按钮,但没有得到我期望的行为。
下面是一个示例:(视图模型有两个属性; list
是一个数组; checkedVal
是可观察的)
<div data-bind="foreach:list">
<input type="radio" data-bind="
checkedValue: {
data: $data,
index: $index(),
},
checked: $parent.checkedVal
"/>
<span data-bind="text: $data"></span>
</div>
JSFiddle
我希望单选按钮行为正常,并检查Val是包含数据和索引的对象。 checkedVal 正如我所期望的那样,但单选按钮没有选择。 奇怪的是,在我的实际代码中,行为不一致;有时无线电屁股有效,有时它们不起作用,但据我所知,它在小提琴中始终不起作用。
这是一个错误,还是我误解了它应该如何工作?
您的checkedValue
绑定将变为如下函数:
function () {
return {
data: $data,
index: $index(),
};
}
每次checked
绑定更新时,它都会调用此函数来获取值。但该函数始终返回一个新对象。即使对象包含相同的数据,Knockout 也不会将它们视为相同。
您可以通过将值设置为字符串来解决此问题。
<input type="radio" data-bind="
checkedValue: JSON.stringify({
data: $data,
index: $index(),
}),
checked: $parent.checkedVal
"/>
或者通过绑定到一致的值。
<input type="radio" data-bind="
checkedValue: $data,
checked: $parent.checkedVal
"/>
编辑:
您可以使用遵循与 checked
相同的模式的自定义绑定,但允许比较函数。
ko.bindingHandlers.radioChecked = {
init: function (element, valueAccessor, allBindings) {
ko.utils.registerEventHandler(element, "click", function() {
if (element.checked) {
var observable = valueAccessor(),
checkedValue = allBindings.get('checkedValue');
observable(checkedValue);
}
});
},
update: function (element, valueAccessor, allBindings) {
var modelValue = valueAccessor()(),
checkedValue = allBindings.get('checkedValue'),
comparer = allBindings.get('checkedComparer');
element.checked = comparer(modelValue, checkedValue);
}
};
然后可以按内容比较对象。
this.itemCompare = function(a, b) {
return JSON.stringify(a) == JSON.stringify(b);
}
js小提琴:http://jsfiddle.net/mbest/Q4LSQ/
此问题似乎已在较新版本的 KO 中得到解决。 从 3.2 版开始,我不再看到我最初的问题中提到的这种行为。
这是一个工作JSFiddle,与原始版本相同,只是KO更新到3.2。
相关文章:
- 多个单选按钮组相互干扰
- 是否可以禁用jquery中的单个单选按钮
- Javascript:无法获取变量中的单选按钮值
- 通过ajax到php文件获取单选按钮值
- 互斥单选按钮和相应的输入字段
- 用于选择MVC3中单选按钮值的JavaScript
- 如何获取单选按钮的多个实例的选定单选按钮值
- react testUtils模拟点击单选按钮而不触发onchange
- 将 checkedValue 绑定与单选按钮一起使用
- 如何将单选按钮valus添加在一起,但如果它们具有相同的值,则如何区分它们
- 如何添加单选按钮和复选框将选择输入到一起以形成JavaScript输出
- 如何将 NGROUTE 与用于更改视图的单选按钮一起使用
- 引导设置单选按钮与 jquery 一起检查
- 将if-else语句与javascript中的单选按钮一起使用
- 如何使用css将单选按钮组堆叠在一起
- 单选按钮被Prop选中,而不与attr一起工作
- 单选按钮在使用引导手风琴时不能与数据切换一起工作
- Parsley.js -在同一页面上以不同形式具有相同名称的单选按钮将被一起验证
- 将Jquery与单选按钮一起使用
- 显示数据和单选按钮,并将单选按钮的选定值与数据一起保存