knockoutjs检查绑定

时间:2011-12-12 21:20:03

标签: knockout.js

我遇到checked绑定问题:单击复选框不会更新可见状态,尽管dependentObservable指示值已更改。

这是HTML片段:

<input type="checkbox" 
        data-bind="checked: document().selected" 
        title="Select one or more documents to find more similar ones" >

这绑定到Posting类的具有document()可观察对象的实例。文档类的相关部分如下所示:

function Document(data, topic) {
    this.id = ko.observable(data.id);
    this.url = ko.observable(data.url);
    this.title = ko.observable(data.title);

    /** Display state **/
    this.selected = ko.observable(false);
    ko.dependentObservable(function() {
        console.log("Selected " + this.url() + " : " + this.selected());
    }, this);

}

当我点击复选框时,控制台会输出如下内容:

Selected http://somedomain.com/doc1.pdf : true

然后复选框仍未选中。

我正在使用jQuery 1.4.2和knockout 1.2.1

淘汰赛的其他方面似乎工作正常。当我在像this这样的jsffiddle中隔离问题时,它按预期工作。关于我接下来要测试什么的想法?

基因

更新时间:2011年12月12日2:54太平洋标准时间:

@RP Niemeyer:我有很多其他dependentObservable个实例;唯一一个metnions selected()看起来像这样:

this.selectedDocuments = ko.dependentObservable( function() {
    return this.documents().findAll(function(doc) {return doc.selected()});
}, this);

findAll做你想的。

据我所知,正在发生的事情是,当触发复选框时selected observable设置为true,这会触发dependentObservable,它会输出正确的值。但是,视图未更新。尽管如此,observable认为它设置为true,因为后续点击相同(取消选中)的复选框不会产生任何进一步的控制台输出。

更新2011年12月12日,太平洋标准时间下午9:45:

我能够在此jsfiddle中重现该问题。如果您编辑封闭div上的单击处理程序,则复选框可以正常工作。是否有解决方法,或者这是一个已知的问题?

1 个答案:

答案 0 :(得分:4)

好的 - 更新有意义。你可以做的是来自外部div上的点击处理程序的return true;。这将允许默认操作继续。

http://jsfiddle.net/rniemeyer/SbuEV/8/