2012-01-10 38 views
26

我想在兩個條件之一爲真時將可見屬性綁定爲true。當我做一個或另一個綁定而不是當我把類似下面的將可見參數綁定到Knockout中的'或'語句

<tr data-bind="visible: active || $parent.displayDeactive">....</tr> 

我的代碼的東西工程||在那裏。我還沒有找到任何文件說我可以在這個綁定中放置任何邏輯,但是如果我不能直接做到這一點,最好的辦法是做什麼,因爲我綁定了一個模板的屬性和$的一個對象父視圖模型。

回答

39

如果您在表達式中使用observable的值,則需要將它們作爲函數引用。所以,如果activedisplayDeactive是可觀察你會怎麼做:

data-bind="visible: active() || $parent.displayDeactive()"

有將其移動到視圖模型的幾種方法,你可以:

  • 創建的孩子計算可觀測(函數需要能夠引用父項)
  • 在父項上創建一個函數,它接收子項並返回您的值(綁定在計算的observable中執行,所以當它訪問的任何可觀察項改變)
  • 創建對發生在父母和返回值的子功能(同一個音符如上)的結合,並使用父在這裏的功能

樣的邏輯:http://jsfiddle.net/rniemeyer/f6ZgH/

+0

謝謝,我知道這會變得簡單。並感謝您在Knockout上的所有工作。我當然很感激它。 – PlTaylor 2012-01-10 13:33:06

6

因爲你正在評估它們,所以在觀察結果後面加上parens。

<input type="checkbox" data-bind="checked:displayDeactive"> Display deactive</input> 
<br/><br/> 
<table> 
    <tbody data-bind="foreach: products"> 
     <tr data-bind="visible: active() || $parent.displayDeactive()"> 
      <td><span data-bind="text:name"></span></td> 
     </tr> 
    </tbody> 
</table> 

你可以在這裏找到完整的代碼:http://jsfiddle.net/johnpapa/gsnUs/

你可以對計算表達式(剛纔看到的@RPNiemeyer迴應與模板化項目使用一個計算屬性太...我+1 「D)。

相關問題