javascript - jquery remove 函数是否也删除了 knockout 绑定(bind)?

标签 javascript jquery html knockout.js

我有一个 div,我在其中使用了挖空绑定(bind)。例如,

<div id='my_div'>
  <span data-bind="text: dialog_body"></span> 
</div>

因此, knockout 绑定(bind)是:

var viewmodel=function(){
 this.dialog_body = 'Some text';
};
ko.applyBindings(new viewmodel(),$("#my_div")[0]);

现在的问题是:如果我调用 $('#my_div').remove(); 这是否也会删除 knockout 绑定(bind)或者我是否应该担心内存泄漏?

最佳答案

jQuery 与 Knockout 无关。它可以删除节点——但这不会清除任何绑定(bind)的 KO 可观察对象。在给定的情况下,这将意味着存在轻微内存泄漏,因为在使用jQuery。

KO 中使用的两种传统方法是 cleanNoderemoveNode(但是两者都不会删除绑定(bind)事件!)应根据需要使用 .. 使用 cleanNode (在通过 KO 绑定(bind)的节点上)是清理数据所需的最小值


但是,我不认为这是一个适合手动清理 KO 的地方!如果使用正确,标准绑定(bind)将已经处理清理。

相反,编写如下代码。 (有关 withProperties,请参阅 Creating custom bindings that control descendant bindings;您还必须 make it virtual-element compatible 才能使用它,如下所示。)

<div id='my_div'>
  <!--ko 'if': someObservable-->
    <!--ko withProperties: { data: someObservable() }-->
      <span data-bind="text: data.dialog_body"></span> 
    <!--/ko-->
  <!--/ko-->
</div>

然后简单地将 observable 设置为创建节点的东西..

someObservable(myVm)

.. 或未定义清除它..

someObservable(undefined)

毕竟,人们通常不会真的 $('#my_div').remove() 而是会 $('#my_div').dialog('close') 。实际上,删除节点也同样有效,只要稍后为新对话框添加回 相同 元素即可。

someObservable 值可能来自“根” View 模型——我建议使用 Root View 模型! - 或者它可能来自窗口属性,对于那些感觉很老套的人:

window.someObservable = ko.observable()

关于javascript - jquery remove 函数是否也删除了 knockout 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482250/

相关文章:

html - 溢出滚动在固定 div 中不起作用?

html - 交替表行颜色,第一行使用不同的颜色

JQuery Tabs - 页面内容加载的样式问题

javascript - 通过 Azure 端点压缩 *.js 和 *.css 文件

JavaScript 正则表达式性能。

javascript - 在 Backbone 模型上定义属性

jquery-ui - 防止 $.ajaxStart() 在 jquery-ui 自动完成期间执行

javascript - jQuery 函数作为其他 jQuery 函数的参数不起作用

php - 将 HTML5 输入类型日期转换为字符串

javascript - 'will-change' 与 'transformZ(0)' 的 JS 动画性能