将$ .proxy与Kendo小部件一起使用会产生内存泄漏

时间:2013-09-22 09:11:33

标签: kendo-ui

这是我对Stackoverflow的第一个问题,所以我希望我做得对:

我在我的应用中广泛使用了Kendo Widgets。我为每个Widget类型(MyAutocomplete,MyGrid等)使用自定义包装器。每个包装器都将代理函数传递给小部件的构造函数:

 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的“配置文件”选项卡,我看到保存包装器的上下文是代理参考:

proxyjquery.js:775
function () {
            return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
        }

我通过删除代理并传递原始事件处理程序来检查这一点。 虽然无法正常运行(粗略),但不再引用包装器。 我认为是这样的:.proxy是原始函数的闭包(例如me.onSelected), 所以'return fn.apply'保持对'fn'的引用,即'me.onSelected'。

所以问题是:关于封闭问题我是否正确,如果是的话 -

如何清除对代理的事件处理程序的引用?

非常感谢提前。

0 个答案:

没有答案