2012-03-22 12 views
1

こんにちは、observableArrayの最初の要素を非表示にしようとしていますが、次のコードは動作していません。ノックアウトjsテンプレート、観測可能な配列の最初の要素をフィルタリング

データバインド= "IFNOT:$ 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

読者は認識しているようにするため、これは本当ににバインドするための正しい方法ではありません(実際にはオブザーバブルにバインドされていませんが、通常はオブザーバブルが内部的に代用する配列に代入されます)。 –

答えて

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

ブリリアント!それはうまくいった!ありがとうございました。それは私がラウンドブラケットを逃した2回目です!私はunwrapObservableあなたが述べた、余分な情報のための歓声を見てみましょう! – Mantisimo

+1

喜んで助けてください!ハッピーコーディング! –

1

typedDataは((追加))、observableArrayです:

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

関連する問題