Knockout.js knockoutjs检查绑定

Knockout.js knockoutjs检查绑定,knockout.js,Knockout.js,我在选中绑定时遇到问题:单击复选框不会更新可见状态,尽管dependentToServable表示该值已更改 以下是HTML片段: <input type="checkbox" data-bind="checked: document().selected" title="Select one or more documents to find more similar ones" > 当我单击复选框时,控制台会打印如下内容: function

我在
选中绑定时遇到问题:单击复选框不会更新可见状态,尽管dependentToServable表示该值已更改

以下是HTML片段:

<input type="checkbox" 
        data-bind="checked: document().selected" 
        title="Select one or more documents to find more similar ones" >
当我单击复选框时,控制台会打印如下内容:

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
this.selectedDocuments = ko.dependentObservable( function() {
    return this.documents().findAll(function(doc) {return doc.selected()});
}, this);
但复选框仍然没有被选中

我使用的是jquery1.4.2和knockout 1.2.1

淘汰赛的其他方面似乎工作正常。当我在jsffiddle-like中隔离问题时,它按预期工作。关于我下一步应该考什么有什么想法吗

基因

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

@RP Niemeyer:我有许多其他的
依赖于可服务的
实例;metnions
selected()
唯一一个如下所示:

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
this.selectedDocuments = ko.dependentObservable( function() {
    return this.documents().findAll(function(doc) {return doc.selected()});
}, this);
findAll
做你想做的事

据我所知,当复选框被触发时,
selected
observable被设置为true,这将触发DependentToServable,并打印正确的值。但是,该视图不会更新。尽管如此,observable认为它设置为true,因为随后单击相同(取消选择)复选框不会产生任何进一步的控制台输出

更新日期:2011年12月12日太平洋标准时间晚上9:45:


我能在这本书中重现这个问题。如果编辑掉封闭div上的click处理程序,复选框将正常工作。是否有解决方法,或者这是一个已知的问题?

好-通过更新,这是有意义的。您可以做的是
返回true来自外部div上的单击处理程序。这将允许默认操作继续


我怀疑这实际上是您的问题,但请确保关闭标签。您的
输入
标记未关闭。这确实会导致KO中的其他元素出现问题。我尝试使用
变体,并产生了相同(不正确)的结果。页面上是否有任何其他事件处理程序(live/delegate)或单击复选框时触发的任何其他事件处理程序。另一个HTML类似于fiddle吗?我添加了进一步的细节来描述这个问题。控制台中有错误吗?我很乐意帮忙。我希望你能在JSFIDLE中得到一个repo,但我知道有时候很难从真正的应用程序中提取。当复选框绑定到一个可观察对象(与DependentoServable相反)时,我没有看到这种特殊类型的问题。其他可能发生这种情况的时候是使用单击绑定而不是选中绑定,但不是在您的情况下。就像一个符咒!谢谢你的帮助!我是否应该始终从单击处理程序“返回true”?使用“clickBubble:false”选项怎么样?@AsleG-它们的用途略有不同。返回
true
将允许执行默认操作(实际上是
event.preventDefault
)。因此,当您单击链接时,它将导航,等等。
clickBubble:true
将允许单击事件冒泡到父元素上的处理程序(
event.stopPropagation
)。希望有帮助!