有没有一种淘汰方式可以做到这一点?
标记:
<div data-bind='topbinding:true'>
<input type="checkbox" data-bind="checked:checkboxvalue_one"/>
<input type="checkbox" data-bind="checked:checkboxvalue_two"/>
<input type="checkbox" data-bind="checked:checkboxvalue_three"/>
</div>
这些复选框可能会也可能不会根据其他api中的内容进行检查。
在&#39; topbinding&#39;的ko绑定中:
ko.bindingHandlers.topbinding = {
init: function (element) {
var $checkboxes = $(element).find('input[type=checkbox]');
$checkboxes.on('change', function() {
console.log('changed');
});
}
}
问题:如果剩下的api提供的模型值 - (在渲染过程中的某个时间到达)更新复选框值,它将不会触发更改&#39;事件。单击该复选框证明jq监听器设置正常,并且一切都正常。
有什么想法吗?我们试图避免直接在复选框中添加绑定 - 让其他人创建标记变得简单......
编辑:不确定我问过这个问题!再来一次
假设我们在<form>
代码上设置了一些javascript来查找<select>
并重新将其写入一些时髦的选择&#39;键入<li>
并隐藏<select>
选择输入,js监听<li>
上的事件以设置幕后的选择值。
当一个KO viewmodel值绑定到此后(例如从ajax请求)到达并更新<select>
值时,会发生什么 - 表单中绑定的js(使得假选择)如何监听改变 ? -
我已经能够通过将ko.bindingHandler添加到输入来实现这一目的,但是寻找一种可以将其设置为顶级的方法。
答案 0 :(得分:1)
根据您的最新评论,我相信自定义绑定可能会解决您的淘汰赛问题
你是对的,视图模型是用于逻辑&amp;数据和绑定适用于ui
如果你想让你的开发人员轻松搞定,因为你有一个复杂的绑定,你应该考虑创建一个自定义绑定,而不是使用标准绑定。
我通常将它用于日期选择器和其他外部组件。
代码可能如下所示:
ko.bindingHandlers.foo= {
init:function(element, valueAccessor, allBindingsAccessor) {
$(element).on('change', function() {
console.log('changed');
});
}
};
你的加价:
<div data-bind='topbinding:true'>
<input type="checkbox" data-bind="foo:checkboxvalue_one"/>
<input type="checkbox" data-bind="foo:checkboxvalue_two"/>
<input type="checkbox" data-bind="foo:checkboxvalue_three"/>
</div>
这样,无论何时使用新数据更新observable,都会触发自定义bindingHandler的init函数,并且您可以完全自由地使用ui元素。
我不是百分百肯定,但我认为如果你不覆盖更新方法,默认的更新机制仍然有效,如果它不起作用,你需要手动设置和更新值(这使您可以很自由地将ui映射到viewmodel observables)。