2011-12-12 94 views
3

我遇到了checked綁定問題:點擊複選框不會更新可見狀態,儘管依賴關係可見性指示值已更改。knockoutjs檢查綁定

下面是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和1.2.1淘汰賽

淘汰賽的其他方面似乎正常工作。當我像this那樣在jsffiddle中隔離問題時,它按預期工作。關於接下來我應該測試什麼的想法?

基因

更新:2011年12月12日2:54 PST:

@RP尼邁耶:我有很多其他dependentObservable實例;該metnions selected()唯一一個看起來是這樣的:

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

findAll做什麼你mighht認爲。

據我所知,發生的情況是,當複選框被觸發時,selected observable被設置爲true,觸發複選框,從而觸發dependentObservable,它打印正確的值。但是,視圖不會更新。儘管如此,observable認爲它被設置爲true,因爲隨後在同一個(取消選擇的)複選框上的點擊不會產生任何進一步的控制檯輸出。

UPDATE 2011年12月12日,下午9:45 PST:

我能夠重現這一jsfiddle問題。如果您編輯封閉div上的點擊處理程序,則複選框將正常工作。有沒有解決辦法,或者這是一個已知的問題?

+0

我懷疑這實際上是你的問題,但要確保您關閉標籤。你的'input'標籤沒有關閉。這確實會導致KO與其他元素的問題。 –

+0

我嘗試使用''和''變種,併產生相同(不正確)的結果。 –

+0

你有任何其他事件處理程序在頁面上(實時/委託)或任何其他點擊複選框時觸發。其他HTML與小提琴類似嗎? –

回答

4

OK - 更新它是有道理的。你可以做的是return true;來自外部div上的點擊處理程序。這將允許默認操作繼續。

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

+0

工程就像一個魅力!感謝你的幫助! –

+0

我應該總是從ko點擊處理程序「返回true」嗎? 如何使用「clickBubble:false」選項? –

+0

@AsleG - 它們有略微不同的目的。返回'true'將允許默認行爲發生(實際上是'event.preventDefault')。所以,當你點擊一個鏈接時,它會導航,等''clickBubble:true'將允許點擊事件冒泡到父元素('event.stopPropagation')上的處理程序。希望有所幫助! –