90

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、..。

4

2 に答える 2

190

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

$parentContext.$index()

それよりも

$parent.index()
于 2012-06-13T10:56:58.430 に答える
3

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

于 2016-05-16T07:15:40.250 に答える