Knockout处理多维数组的标准方式是什么?在Knockout JS中处理多维数组的最佳方式是什么?
假设你想用KnockoutJS生成一个动态表。表行和列是从observableArrays生成的。每个单元格内的数据也是可观察的(数据绑定到文本框)。每个细胞内部的数据也需要通过敲除验证来验证。
我使用类似的东西产生我的文本框的值:
data-bind="value: $root.qty[$index()][$parentContext.$index()]"
这是内部的两个的foreach为TBODY:
<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>
它运作良好,但我需要能够根据我正在编辑的项目动态更改数据。只要我改变列数或行数,就会导致各种问题。我使用throttle扩展程序,通过在渲染之前使渲染等待可观察的行和列,从而减少了很多这些问题。
每次我改变当前编辑的项目,我使用简单的javascript数组重新生成qty [] []多维数组,每个实际值都是可观察值。
这是我有一个典型问题的例子。对于这个特定的例子,我验证了我的数量值(单元格)的最小值和最大值。但是,当我重新绑定包含更少行或更少列的表时,我会得到以下的豁免(Uncaught TypeError:无法读取未定义的属性'规则')。我正在更改行和列的observableArrays,绑定data-bind =“$ root.qty [$ index()] [$ parentContext。$ index()]”不再有效,因为其中一个索引超出了界。
我错过了什么?
谢谢!