gpt4 book ai didi

javascript - Ko模型持久化

转载 作者:行者123 更新时间:2023-12-03 12:04:31 27 4
gpt4 key购买 nike

我有一个关于与特定 DOM 元素关联的 knockout 模型的内存分配和消耗的问题。

假设我有一个 html 元素,并为其设置了 ko 模型。然后我用 JQuery 的remove() 销毁该元素。然后我创建另一个具有相同 div 的元素,并再次关联相同的旧模型。

问题:第一个元素的模型是否在元素删除时停用?当我创建具有相同 ID 的新元素时,旧模型是否仍然处于事件状态,并且它是否像处理旧元素一样处理新元素的事件?使用 cleanNode 会改变这种行为吗?

最佳答案

Edit2:方法命名有点困惑。当我谈论 ko.cleanNode 时,实际上我想到的是 ko.removeNode (它在内部调用 cleanNode)。因此,在下面我输入 cleanNode 的所有地方,请改为阅读“removeNode”。

François Wahl 在评论中回答了您的大部分问题,因此我不会再次回答。但也许最重要的问题仍未得到解答:使用 (ko.)cleanNode 是否会改变这种行为?是的,确实如此,至少部分如此。 cleanNode 提供(自定义)绑定(bind)和钩子(Hook)来取消绑定(bind)事件处理程序,并执行各种其他清理。如果你不得不担心这类事情,那么删除 dom 节点应该始终使用 ko.cleanNode 来完成,而不是使用 jQuery。

但是,使用 cleanNode 并不能保证所有内容都得到很好的清理。正如我已经说过的,在自定义绑定(bind)中,您仍然必须响应正确的事件:

ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
// Clean me up!
});

编辑:为了清理 View 模型,我发现在 View 模型上实现某种生命周期通常是最好的(这样你还可以获得激活/处置 Hook 等)。然后,“ View 管理器”可以处理加载 View / View 模型并处理它们。如需灵感,请查看 Durandal 框架,它在这方面做得非常好。

关于javascript - Ko模型持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com