1

我有一张由 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调用更新,然后赋值(program(ko.mapping.fromJS(prg)))。

程序有一个项目数组,项目数量大小不一,但每个项目总是有需要的字段。

我想有一种方法可以设置它,以便 Knockout 只渲染新事物。

例如,如果我当前的程序中有 6 个项目,则创建一个有 6 行的表,如果我得到一个不同的程序,其中也有 6 个项目,那么该表实际上不应该重新渲染该表,只需使用已经存在的内容。如果那时我有一个 7 项程序,它只会呈现它需要的单行。如果有 5 个项目在之后的一个中出现,它会简单地删除它不使用的 2 个

这听起来可能吗?还是我不在基地?** 此外,为了方便起见,我上面的示例已被简化,该表还包含一些 ko.computed 函数。

4

1 回答 1

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

于 2012-10-27T01:35:22.830 回答