我正在重构一些现有代码以使用Knockout。有问题的代码是一个日历,可以在之前和之后的几个月或几周内动态构建为用户页面。
日历的工作方式是当用户按下下一个或上一个时,该容器会将其清除然后重建。
让Knockout工作很简单,只需在单元格上应用正确的data-bind
参数,然后调用ko.applyBindings
。
我担心的是,因为代码会破坏Knockout绑定的DOM元素,因此它会泄漏内存。是这种情况,如果是这样,在清除包含绑定的容器之前,日历应该做什么?
答案 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" }]
});