Kendo ui 将$.proxy与剑道小部件一起使用会产生内存泄漏
这是我向Stackoverflow提出的第一个问题,所以我希望我做得对: 我在我的应用程序中广泛使用剑道小部件。我为每个小部件类型MyAutocomplete、MyGrid等使用自定义包装器。每个包装器都将代理函数传递给小部件的构造函数:Kendo ui 将$.proxy与剑道小部件一起使用会产生内存泄漏,kendo-ui,Kendo Ui,这是我向Stackoverflow提出的第一个问题,所以我希望我做得对: 我在我的应用程序中广泛使用剑道小部件。我为每个小部件类型MyAutocomplete、MyGrid等使用自定义包装器。每个包装器都将代理函数传递给小部件的构造函数: var me=this; $("#mywidget").kendoAutoComplete({ ... dataTextField: me.dataTextField, select: $.proxy(me.onSelecte
var me=this;
$("#mywidget").kendoAutoComplete({
...
dataTextField: me.dataTextField,
select: $.proxy(me.onSelected, me),
change: $.proxy(me.onChanged, me),
});
包装器有一个dispose函数,它调用Kendo的“destroy”方法、Jquery的“remove”和“off”方法等
运行我的应用程序会产生严重的内存泄漏。
使用Chrome Dev Tools的Profiles选项卡,我看到保存包装的上下文是代理引用:
proxyjquery.js:775
function () {
return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
}
我通过移除代理并传递原始事件处理程序来检查这一点。
虽然不能正常运行,但包装器不再被引用。
我认为:。代理是原始函数的闭包,例如me.onSelected,
因此,“return fn.apply”包含对“fn”的引用,即“me.onSelected”
所以问题是:我对关闭问题的看法正确吗?如果是的话-
如何清除对代理的事件处理程序的引用
非常感谢