您不能多次将绑定应用于同一元素敲除

时间:2018-06-12 15:08:28

标签: asp.net-mvc knockout.js

我知道之前曾问过这个问题,但使用cleanNode并没有解决问题。

我需要显示存储在数组中的订单ID列表。到目前为止我做了以下事情:

     self.Orders = ko.observableArray([]);
 for (var i = 0; i <= self.OrdersIds().length; i++) {                                  
    //ko.cleanNode($("#Table"));
     ko.applyBindings({ Orders: [{ orderId : self.OrdersIds()[i] }] }, document.getElementById("oTable"));
            }

    <table id="commentsTable">
        <tbody data-bind="foreach: Orders">
            <tr>
                <td data-bind="text: orderIdt"></td>

            </tr>
        </tbody>
    </table>

1 个答案:

答案 0 :(得分:0)

当您正在执行 ko.applyBindings 而没有传递元素ID模型时,会自动应用于整个文档。

您可以传递给applyBindings函数的第二个参数 - 要应用绑定的html元素。在你的情况下:

l = [2., None, 3., 1., None, 2., None, 5.]
l = [(v, i) for i, v in enumerate(l) if v is not None]
print( sorted(l, key=lambda x: x[0])[0] )

这会将模型(Orders)中的每个属性(递归)映射到html table&#39; oTable&#39;。之后,您可以修改Orders js模型(在数组中添加/删除项目),并且所有这些都将反映在您的html中。

你的例子并不完全正确,因为你忽略了淘汰的主要优势(我的意思是可观察的)。当您以这样的方式创建模型时 Orders:[{orderId:self.OrdersIds()[i]} - 它不再充当可观察数组,HTML不能对模型变化做出反应。