2012-03-22 60 views
1

嗨我想讓隱藏的我的observableArray的第一個元素,以下似乎沒有工作,任何想法?Knockout js模板,過濾可觀察數組的第一個元素

數據綁定= 「如不方便:$ root.typedData [0] === $數據」 http://jsfiddle.net/Lx8jR/

<table border="1" style="width:90%"> 
    <tr> 
     <td data-bind="text: typedData()[0].name"></td> 
     <td data-bind="text: typedData()[0].type"></td> 
    </tr> 

    <tr> 
     <td> 
      <table data-bind="foreach: typedData()"> 
       <tr> 
        <td data-bind="text: name"></td> 
       </tr> 
      </table>    
     </td> 
     <td> 
      <table data-bind="foreach: typedData()"> 
       <tr data-bind="ifnot: $root.typedData[0]===$data"> 
        <td data-bind="text: type"> 

        </td> 
        <td data-bind="text: $index"> 
        </td> 
       </tr> 
      </table>   
     </td>   
    </tr> 
</table> 


var ViewModel = function() { 
    var self = this; 
    this.typedData = ko.observableArray([ 
    { name: "Bungle", type: "Bear" }, 
    { name: "George", type: "Hippo" }, 
    { name: "Zippy", type: "Unknown" } 
]).indexed(); 
} 
+1

使讀者都知道,這真的是不綁定到一個正確的方法可觀察數組(它實際上並沒有綁定到observable,而是對內部數組,observable通常會代理)。 – 2013-02-14 22:08:41

回答

2

看起來你在該行錯過了()。

ifnot: $root.typedData[0]===$data 

成爲

ifnot: $root.typedData()[0]===$data 

http://jsfiddle.net/Lx8jR/1/

一個簡單的錯誤我犯了一個幾十倍。

如果你養成了使用ko.utils.unwrapObservable的習慣,這個問題就變得不大了。如果您在不可觀察的地方使用該函數,它仍然會成功。

... ko.utils.unwrapObservable($root.typedData)[0] 

以供參考,有一個article on KnockMeOut這表明一些其他的標準,有助於簡化我們的模板和綁定。

+1

太棒了!工作!感謝那。這是我第二次錯過了圓括號!我會研究你提到的unwrapObservable,爲額外的信息歡呼! – Mantisimo 2012-03-22 13:23:27

+1

很高興幫助!快樂編碼! – 2012-03-22 13:31:16

1

typedData是observableArray,因此比較,你會想這樣做(添加()):

$root.typedData()[0] === $data