如何防止此表重新呈现行

时间:2012-10-27 01:14:12

标签: knockout.js knockout-mapping-plugin

我有一个由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函数。

1 个答案:

答案 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>

请参阅https://github.com/mbest/knockout-repeat