2012-02-14 28 views
0

我在使用「看得見的」綁定和模板列表項也是一種習俗在相同的元素結合:KnockoutJS - 聯合綁定覆蓋對方

<li data-bind="visible: (Applicable == 'All'), highlight: Selected().indexOf('false',0) == -1"> 

這將檢查該視圖的每一個綁定的成員模型集合,並且如果「適用」屬性的值爲「全部」,則使列表項可見。

我還使用自定義綁定的一類適用於依賴於綁定的成員的「選擇」屬性是否包含字符串「假」列表項。

ko.bindingHandlers.highlight = { 
     update: function (element, valueAccessor, viewModel) { 
      var value = valueAccessor(); 
      ko.utils.unwrapObservable(value) ? $(element).addClass("selected", 1000) : $(element).removeClass("selected", 1000); 
     } 
    }; 

的問題是,「亮點」自定義綁定似乎覆蓋/替換是由可見的結合重新出現的亮點結合時發生隱藏在可見的約束力和列表項。似乎執行可見綁定,然後執行高亮綁定並忽略可見綁定的結果。

我希望我已經解釋了這行。

我可以合併可見綁定到我的自定義的功能結合,這樣我打電話只是1這就決定了列表項目是否應該是可見的或隱或可見光加應用的亮點結合事件?

+0

如果需要,您當然可以合併這兩個綁定。但是,在jsFiddle中重現您的問題可能會對您有所幫助。你可以基地而過:http://jsfiddle.net/rniemeyer/dJxRW/ – 2012-02-14 16:32:27

+0

嗨瑞安,我要去嘗試和再現JS騙取錢財的問題,因爲你的建議。我認爲解決這個問題對我來說是件好事。說實話,我簡化了這個例子,使它更容易寫出問題,而你的小提琴表明我的基本範例應該可以工作。我現在修改了小提琴,添加了一個「maxPersonAge」計算觀察值,該觀察值返回2人的最大年齡,然後我只想顯示MaxAge屬性小於maxPersonAge的列表項。但是,我已經收到錯誤:「消息:ReferenceError:maxPersonAge未定義」。 – BrightonDev 2012-02-14 17:57:58

+0

剛剛意識到JSFiddle是如何工作的。該URL到我的修改頁面http://jsfiddle.net/FloatLeft/dJxRW/11/ – BrightonDev 2012-02-14 18:45:05

回答

0

而是具有約束力的處理程序,你可以考慮使用一個計算觀察到,以確定是否添加CSS類或沒有。在下面的代碼片段isSelected值是一個計算可觀察。

<li data-bind="visible: applicable === 'all', css: {selected: isSelected}"> 

當然,我不確切知道你的代碼在做什麼,因爲我們看不到它的全部。但它的一個選擇。另一種是編寫綁定處理程序來完成這一切,就像你所建議的那樣。

+0

嗨,約翰,你說得對。你的建議確實解決了我的綁定問題。雖然我失去了課堂的逐步申請和免職。 Theres obviosly有什麼問題,我的代碼這導致了我上面提到的問題,所以我會嘗試儘可能地重建它,我可以在小提琴中。 – BrightonDev 2012-02-14 18:13:04