1. ホーム
  2. javascript

[解決済み] ノックアウトビューで$parentの$parentにアクセスする - ネストコンテキスト

2023-07-08 17:56:15

質問

簡潔にするために更新

Knockoutのネストしたforeach / bindingで$parentsの$parentを参照するにはどうしたらよいですか?

例-。

    <!-- ko foreach: grandParent -->
        <tr>
            <!-- ko foreach: $parent.parents --> // <-- Doesn't work
                <!-- ko foreach: children -->
                    <td data-bind="if: favToy().name == $parent.$parent.favToy().name">
                        <span data-bind="text: favToy().name"></span>
                    </td>
                <!-- /ko -->
            <!-- /ko -->
        </tr>
    <!-- /ko -->

オリジナル

わかりにくい質問で申し訳ありませんが、私は2番目のレベルの親の値に到達して、現在のコンテキスト内の値と照合し(以下のように)、それが$parentの$parentの値と一致する場合にのみスパンを表示しようとしています(うっ!)。

    <!-- ko foreach: grandParent -->
        <tr>
            <!-- ko foreach: $parent.parents -->
                <!-- ko foreach: children -->
                    <td data-bind="if: favToy().name == $parent.$parent.favToy().name">
                        <span data-bind="text: favToy().name"></span>
                    </td>
                <!-- /ko -->
            <!-- /ko -->
        </tr>
    <!-- /ko -->

このようにするのが簡単なのですが、私が読んだ限りでは、これは不可能か、私が間違ったやり方をしているようです :)

    <!-- ko foreach: grandParent -->
        <tr>
            <!-- ko foreach: $parent.parents -->
                <!-- ko foreach: children ? favToy().name == $parent.$parent.favToy().name -->
                    <td  data-bind="text: favToy().name"></td>
                <!-- /ko -->
            <!-- /ko -->
        </tr>
    <!-- /ko -->

何かお手伝いいただけることがあれば、ぜひお願いします。

どのように解決するのですか?

を使用します。 $parents の配列を使用すると、祖父母は $parents[1] . また $root を使うこともできます。 grandParent オブジェクトが最上位の親である場合。

から ドキュメント :

$parents

これは、すべての親ビューモデルを表す配列です。

parents[0] は、親コンテキストからのビューモデルです (つまり、$parent と同じです)。 $parent と同じ)

parents[1] は祖父母コンテキストのビューモデルです。

Parents[2]は曾祖父母コンテキストのビューモデルです。

...といった具合になります。

$root

これはルートコンテキスト、すなわち、最上位の親コンテキストにおけるメインのビューモデルオブジェクトです。 一番上の親コンテキストです。通常、これは に渡されたオブジェクトです。これは $parents[$parents.length - 1] と等価です。