正确多次应用绑定的方法

时间:2017-04-25 02:47:16

标签: knockout.js

我正在重构一些现有代码以使用Knockout。有问题的代码是一个日历,可以在之前和之后的几个月或几周内动态构建为用户页面。

日历的工作方式是当用户按下下一个或上一个时,该容器会将其清除然后重建。

让Knockout工作很简单,只需在单元格上应用正确的data-bind参数,然后调用ko.applyBindings

我担心的是,因为代码会破坏Knockout绑定的DOM元素,因此它会泄漏内存。是这种情况,如果是这样,在清除包含绑定的容器之前,日历应该做什么?

2 个答案:

答案 0 :(得分:0)

通常,您不需要多次应用绑定。您可以创建模型,选择DOM节点并对其应用绑定。如果在应用程序生命周期内模型发生某种变化,则此变化会​​通过模型的可观察或计算属性的通知反映在标记上。

但是如果你将knockout组件注入另一个应用程序,管理已经应用了knockout绑定的节点,你可以从敲除绑定中清除节点:

var element = document.getElementById("MyNodeId");
ko.cleanNode(element);

答案 1 :(得分:0)

  

不要使用cleanNode函数来重新绑定模型 - 而是使用   模拟一个可观察的。

Jef Claes blog开始,我一直在使用此概念来重新绑定模型,而不是使用cleanNode

示例代码

<div id="books">
    <ul data-bind="foreach: bookModel().booksImReading">
        <li data-bind="text: name"></li>
    </ul>
</div>

var page = {
    bookModel : ko.observable({
        booksImReading: [
            { name: "Effective Akka" }, 
            { name: "Node.js the Right Way" }]
    })
};

ko.applyBindings(page, elementToBind);

page.bookModel({
    booksImReading: [
        { name: "SQL Performance Explained" },
        { name: "Code Connected" }]
});