KnockoutJS-为输入类型无线电编写KO绑定句柄的正确方法
KnockoutJS - Correct Way of Writing KO BindingHandlers for Input Type 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插件)
现在的问题是,当单击单选按钮时,包含该元素的相关可观察值的功能实际上会被触发,并且在调试过程中可以看到的值
$('#RadioNo').is(':checked')
当单击"无单选按钮"时实际上为true,而当单击"是"单选按钮时为false 但是,页面本身没有显示要选择(选中)的单选按钮
目前,我在这里使用的ko BindingHandlers只是"点击"。
我尝试添加更多的bindingHandler,它是"checked:this",并将其放在"click:this"行的下面,但仍然不起作用。
有人能帮我确定这里的问题是什么,应该如何解决吗?
谢谢。
从你的问题中还不清楚你想要的行为是什么,但我已经整理了一个具有典型单选按钮行为的片段。最重要的变化是,我为每个单选按钮元素添加了一个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);
<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>
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 直接导航到子模板时,句柄绑定在父模板上不起作用
- 带有模板化元素句柄的Knockout绑定
- KnockoutJS-为输入类型无线电编写KO绑定句柄的正确方法
- 是否有任何帮助程序允许忽略/不编译句柄绑定