knockout.jsの$ parentのアクセスインデックス


87

knockout.js 2.1.0では、foreachバインディングを使用するテンプレートで、$ index()関数を介して現在のアイテムのインデックスにアクセスできます。ネストされたforeachバインディングで、テンプレートから$ parentのインデックスにアクセスする方法はありますか?

次のようなデータ構造があるとします。

var application = {
  topModel: [
    {
      {subModel: [{'foo':'foo'}, { 'bar':'bar'}]}, // this has top:0 and sub:0
      {subModel: [{'foo2':'foo2'}, { 'bar2':'bar2'}]} // this has top:0 and sub:1
    },
    {
      {subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:1 sub:0
    },
    {
      {subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:2 sub:0
      {subModel: [{'foo':'foo'}, { 'bar':'bar'}]} // this is top:2 sub:1
    },
    ...
    ]};

これで、インデックス[topModel-index subModel-index]を使用して、各モデルへのパスを出力し、出力が次のようになるようにします。

[0 0]
[0 1]
[1 0]
[2 0]
[2 1]
...

foreachを使用してモデルをバインドしましたが、subModelのコンテキストでtopModelのインデックスにアクセスする方法がわかりません。次の例は、私が試したアプローチを示していますが、$ parentリファラーのインデックスにアクセスする方法がわからないため、機能しません。

<!--ko foreach: topModel -->
<!--ko foreach: subModel -->
  [<span data-bind="text: $parent.index()"></span>
  <span data-bind="text: $index()"></span>]
<!--/ko-->
<!--/ko-->

印刷する必要があります:0 1、0 2、1 0、1 1、1 2、2 0、2 1、..。


()その後は実際には必要ありません$index
Matthew Schinckel 2012年

また、持っているものでjsfiddleを作成できれば、それは簡単になります。または、データソースを投稿してモデルコードを表示します。
Matthew Schinckel 2012年

今のところ、私はプロトタイピングに取り組んでいるだけなので、与えられた例以上のものはありません。ただし、他のアプローチを使用した提案も受け付けています。
ヨルゲン

方法ではなく、をしようとしているのを説明しください。別のアプローチがあるかもしれません。
Matthew Schinckel 2012年

ありがとう。私は質問を変更しました、そしてうまくいけば、それは今より明確になっていますか?
ヨルゲン2012年

回答:


185

親オブジェクトのインデックスにアクセスするには、

$parentContext.$index()

のではなく

$parent.index()

ありがとう。それを見つけようとして何年も費やしただけです!
DavidHyogo 2013

14
とはいえ、無知という名目で過度に露骨にするには、それでも親と関係があります$parentContext.$index()。; ^)$ parentContextについてもう少し詳しく説明します、fwiw。
ラフィン2013

3
ありがとう-間違いなく注目に値します。複合値のコンテキストでは、()を追加する必要がありますが、質問に従って要素を$ parentContext。$ indexにバインドする場合は、それは必要ありません。
ブレットスミス

5
括弧が必要$parentContext.$index()
Jaider 2013年

4
$parentContext.$parentContext.$index()あなたが期待するようにそれを追加したかっただけです。
Ryan Wheale 2014年

3

あなたが見つけることができる最も簡単な方法は、クロムの「ノックアウトコンテキスト」をダウンロードすることです。これにより、どのデータがどの要素にバインドされているかがわかり、その特定のバインドされた要素で使用可能な関数/変数を確認することもできます。これは、このような状況に対応する素晴らしいツールです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.