我有一个由Knockout呈现的表
<table data-bind="visible: program">
<thead>
<tr>
<td>Post</td>
<td>Name</td>
<td>Odds</td>
<!--ko foreach: options -->
<td data-bind="visible: value, text: name"></td>
<!-- /ko -->
</tr>
</thead>
<tbody data-bind="foreach: program() ? program().item: []">
<tr>
<td>
<span data-bind="text: place"></span>
</td>
<td><span data-bind="text: name"></span></td>
<td><span data-bind="text: odd"></span></td>
<!--ko foreach: $parent.options -->
<td data-bind="visible: value">
<span data-bind="text: $parent[prop]"></span></td>
<!-- /ko -->
</tr>
</tbody>
</table>
此表根据我所拥有的(程序)可观察来呈现。 '程序通过ajax调用然后赋值(程序(ko.mapping.fromJS(prg)))更新。
程序有一系列项目,项目数量大小不一,但每个项目总是有所需的字段。
我想有一种方法可以设置它,以便Knockout只能渲染新东西。
例如,如果我当前的程序中有6个项目,那就创建了一个包含6行的表,如果我得到一个也有6个项目的不同程序,那么该表实际上不应该重新渲染表只是使用什么已经在那了。如果那时我有一个7项目程序,它只会渲染它所需的单行。如果之后有5个项目进入,那么它只会移除2个未使用
的项目这听起来有可能吗?还是我离开基地? **此外,我上面的示例已经减少了,表格中还包含一些ko.computed函数。
答案 0 :(得分:1)
我的repeat
绑定确实如此。它只在数组变大时呈现新行:
<tbody>
<tr data-bind="repeat: program() ? program().item: []">
<td>
<span data-bind="text: $item().place"></span>
</td>
<td><span data-bind="text: $item().name"></span></td>
<td><span data-bind="text: $item().odd"></span></td>
<!--ko foreach: options -->
<td data-bind="visible: value">
<span data-bind="text: $item()[prop]"></span></td>
<!-- /ko -->
</tr>
</tbody>