Knockout cleanNode()删除了jquery事件绑定?

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. }; 

最近我因为无休止的调试会话而疯狂。

我看到了这个问题,我希望我的答案能为那些仍在寻找的人提供更直接的解决方案。

@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; } 

也适用于TypeScript,其中cleanExternalData不在打字中。

cleanNode不会采用任何可以阻止此行为的参数。 我认为你最好的选择是基于Knockout函数创建自己的方法,但没有jQuery清理。 如果没有构建要validation的示例应用程序,我会创建一个与cleanSingleNode(node)相同的函数并删除此行:

 if ((typeof jQuery == "function") && (typeof jQuery['cleanData'] == "function")) jQuery['cleanData']([node]); 

您可以在此处查看调试源以获取有关其他相关内部function的更多信息: http : //knockoutjs.com/downloads/knockout-2.2.1.debug.js

处理此问题的最佳方法是将jQuery绑定代码与knockout绑定分开。 通过这种方式,您可以简单地调用该函数来重做jQuery绑定。 不幸的是,可能需要现有代码的代码重构来执行此操作。