2

这是我对 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 开发工具的配置文件选项卡,我看到保存包装器的上下文是代理引用:

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

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

所以问题是:我对关闭问题是否正确,如果是这样 -

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

提前谢谢了。

4

0 回答 0