我为输入类型radio设置了一个自定义绑定,如下所示:
"radio-yesno": function(bindingContext, dataClasses){
return {
click: this,
}
},
Html输入类型单元格与此绑定的内容如下:
<label class="radio inline">
<input type="radio" name="RadioTest" id="RadioYes" data-class="radio-yesno"/>
Yes
</label>
<label class="radio inline">
<input type="radio" name="RadioTest" id="RadioNo" data-class="radio-yesno"/>
No
</label>
(您可能会注意到我在这里使用数据类来绑定元素,这是因为我使用 ClassBindingProvider 插件)
现在的问题是当单击单选按钮时,实际触发了包含该元素的关联observable的函数并且在调试期间可以看到
的值$('#RadioNo').is(':checked')
单击No Radio Button时实际为true,单击Yes Radio按钮时为
目前我在这里使用的ko BindingHandlers只是“点击”。
我试图添加更多的bindingHandler,它是“checked:this”并将其放在“click:this”行下面,但仍然不起作用。
有人可以帮助我确定这里的问题是什么以及如何解决?
感谢。
答案 0 :(得分:1)
从您的问题中不清楚您的行为是什么,但我已经整理了一个典型的单选按钮行为的片段。最重要的变化是我为每个单选按钮元素添加了value
属性。没有它们,选择不同的单选按钮就没有价值变化。
我已经写过,但在这里注释了一个点击绑定,并使用了一个检查绑定,这通常是绑定一个无线电组的更好方法。我订阅绑定变量只是为了在更改时输出信息。
let bindings = {
"radio-yesno": function(bindingContext, dataClasses) {
return {
// click: this.clickHandler,
checked: this.checkedVariable
}
}
};
ko.bindingProvider.instance = new ko.classBindingProvider(bindings);
let vm = {
clickHandler: function(data, event) {
console.debug("Click:", data, event);
true;
},
checkedVariable: ko.observable('on')
};
vm.checkedVariable.subscribe((newValue) => {
console.debug('New value:', newValue);
});
ko.applyBindings(vm);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="//rawgit.com/rniemeyer/knockout-classBindingProvider/master/src/knockout-classBindingProvider.js"></script>
<label class="radio inline">
<input type="radio" name="RadioTest" value="on" data-class="radio-yesno" />Yes
</label>
<label class="radio inline">
<input type="radio" name="RadioTest" value="off" data-class="radio-yesno" />No
</label>
&#13;