<input type="checkbox" data-bind="checked: appealsFromThisCase, event: { change: onappealsFromThisCaseChange}" id="appealsforCaseCheckBox"/>
vm.onappealsFromThisCaseChange = function () {
if (vm.appealsFromThisCase())
{
vm.predicate(new breeze.Predicate("CaseId", "==", caseID));
return datacontext.getCaseAppeals().then(function () {
return true;
});
}
}
else
return vm.getAppeals();
上面是一个复选框,它绑定(bind)到appealsFromThisCase 可观察的值,该可观察值最初为 false。 在更改事件中, onappealsFromThisCaseChange 被触发,并且我看到可观察的appealsFromThisCase 在未选中复选框时给出 true ,在选中复选框时给出 false 。
最佳答案
看起来 ko 以一种奇怪的方式处理更改事件。 fiddle :http://jsfiddle.net/wnLyV/1/
js:
var VM = function(){
var self = this;
self.appealsFromThisCase = ko.observable(false);
self.appealsFromThisCase.subscribe(function(value){
console.log("from subscribe: " + value);
})
self.onappealsFromThisCaseClick = function(data){
console.log("from click: " + data.appealsFromThisCase());
return true;
}
self.onappealsFromThisCaseChange = function(data){
console.log("from change: " + data.appealsFromThisCase());
return true;
}
}
ko.applyBindings(new VM());
另请参阅这些:
knockout.js and listen to check event on checkbox
Knockout checkbox change event sends old value
您能否将更改事件绑定(bind)替换为单击绑定(bind)或订阅(如 fiddle 中所示),或者您是否特别需要更改?
编辑:
因此,根据下面的评论,最终答案是:
将 onappealsFromThisCaseChange
函数包装到另一个函数中,该函数将是实际的处理程序并始终返回 true。因此,只需创建另一个处理程序,如下所示:
function(){
onappealsFromThisCaseChange();
return true;
}
关于带有 knockout 数据绑定(bind)的复选框在选中的事件上给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791973/