ノックアウトで多次元配列を扱う標準的な方法は何ですか?
KnockoutJS を使用して動的テーブルを生成するとします。テーブルの行と列は、observableArrays から生成されます。各セル内のデータもオブザーバブル (テキスト ボックスにバインドされたデータ) です。各セル内のデータも、ノックアウト検証で検証する必要があります。
私はそのようなものを使ってテキストボックスの値を生成しています:
data-bind="value: $root.qty[$index()][$parentContext.$index()]"
これは、tbody の 2 つの foreach 内にあります。
<tbody data-bind="foreach: $root.styleColors">
<tr>
<td data-bind="text: StyleColorName, visible: $root.showFirstColumn"></td>
<!-- ko foreach: $root.sizes -->
<td>
<input type="text" class="qty" data-bind="value: $root.qty[$index()][$parentContext.$index()]"/>
</td>
<!-- /ko -->
</tr>
</tbody>
うまく機能しますが、編集しているアイテムに応じてデータを動的に変更できる必要があります。列または行の数を変更するとすぐに、あらゆる種類の問題が発生します。スロットルエクステンダーを使用して、レンダリングの前に行と列の両方が観察可能になるまでレンダリングを待機させることで、これらの問題の多くを軽減しました。
現在編集中の項目を変更するたびに、単純な JavaScript 配列を使用して qty[][] 多次元配列を再生成し、実際の値はそれぞれ観察可能です。
これは私が持っている典型的な問題の例です。この特定の例では、数量値 (セル) の最小値と最大値を検証します。しかし、行または列が少ないテーブルを再バインドすると、次の例外 (Uncaught TypeError: Cannot read property 'rules' of undefined) が発生します。行と列の observableArrays を変更しています。バインディング data-bind="$root.qty[$index()][$parentContext.$index()]" は無効になりました。バウンド。
私は何が欠けていますか?
ありがとう!