【问题标题】:You cannot apply bindings multiple times to the same element knockout您不能多次将绑定应用于同一个元素剔除
【发布时间】:2018-11-22 01:03:46
【问题描述】:

我知道之前有人问过这个问题,但使用 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>

【问题讨论】:

  • 你为什么要在循环中调用applybindings?这段代码没有多大意义。请在描述中包含更多内容或提供更多背景信息。

标签: asp.net-mvc knockout.js


【解决方案1】:

当你在 ko.applyBindings 没有传递元素 id 的情况下,模型会自动应用于整个文档。

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

ko.applyBindings({ Orders: this.Orders }, document.getElementById('oTable'));

这会将模型(订单)中的每个属性(递归)映射到 html 表“oTable”。之后,您可以修改 Orders js 模型(从数组中添加/删除项目),所有这些都将反映在您的 html 中。

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

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2013-09-21
    • 2017-01-20
    • 2016-09-26
    • 2018-03-18
    • 2020-05-14
    • 2013-07-16
    • 2013-09-27
    • 2014-04-13
    相关资源
    最近更新 更多