Ath*_*hri 12 jquery knockout.js
Knockout的cleanNode()功能似乎是删除了节点内元素的jQuery事件绑定.我怎么能阻止这个?
我也找不到很多文件cleanNode().
直接来自淘汰赛文档:
"覆盖外部数据的清理
删除元素时,Knockout会运行逻辑来清理与该元素关联的所有数据.作为这个逻辑的一部分,如果在页面中加载了jQuery,Knockout会调用jQuery的cleanData方法.在高级方案中,您可能希望阻止或自定义在应用程序中删除此数据的方式.Knockout公开了一个函数ko.utils.domNodeDisposal.cleanExternalData(node),可以重写该函数以支持自定义逻辑.例如,为了防止调用cleanData,可以使用空函数替换标准的cleanExternalData实现:"
ko.utils.domNodeDisposal.cleanExternalData = function () {
// Do nothing. Now any jQuery data associated with elements will
// not be cleaned up when the elements are removed from the DOM.
};
Run Code Online (Sandbox Code Playgroud)
最近我因为无休止的调试会话而疯狂.
我看到了这个问题,我希望我的回答能为那些仍在寻找的人提供更直接的解决方案.
@T-moty的答案工作正常,所以我写了一个简短的函数,它覆盖了cleanExternalData方法,调用clearNode并设置原始方法.
private koClearNode(element: HTMLElement)
{
var original = ko.utils.domNodeDisposal['cleanExternalData'];
ko.utils.domNodeDisposal['cleanExternalData'] = function () { };
ko.cleanNode(element);
ko.utils.domNodeDisposal['cleanExternalData'] = original;
}
Run Code Online (Sandbox Code Playgroud)
也适用于TypeScript,其中cleanExternalData不在打字中.
Ath*_*hri -3
处理此问题的最佳方法是将 jQuery 绑定代码与淘汰绑定分开。这样,您可以简单地调用该函数来重做 jQuery 绑定。不幸的是,可能需要对现有代码进行代码重构才能做到这一点。
| 归档时间: |
|
| 查看次数: |
3080 次 |
| 最近记录: |