2
<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();

上面是一个绑定到可观察到的appealsFromThisCase 的复选框,它最初是错误的。在更改事件上, onappealsFromThisCaseChange 被触发,我看到可观察到的 AppealsFromThisCase 在未选中复选框时给出 true,在选中复选框时给出 false。

4

1 回答 1

3

看起来 ko 以一种奇怪的方式处理更改事件。小提琴: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 并监听复选框上的检查事件

剔除复选框更改事件发送旧值

您可以用点击绑定或订阅替换更改事件绑定,就像在小提琴中一样,还是您特别需要更改?

编辑:

所以,根据下面的评论,最终的答案是:

将函数包装onappealsFromThisCaseChange到另一个函数中,这将是实际的处理程序并始终返回 true。所以只需像这样制作另一个处理程序:

function(){ 
    onappealsFromThisCaseChange(); 
    return true; 
}
于 2013-11-05T15:18:29.650 回答