【发布时间】:2014-10-15 19:10:14
【问题描述】:
已经有一段时间了,所以我现在正在寻找一些外部帮助。基本要点是我们在应用程序中使用 Kendo,但我们希望为提供的每个内置 kendo 指令创建指令包装器。这允许以更可重用的格式为我们的应用程序覆盖功能并处理我们想要的事情。也就是说,我注意到使用直接 kendo-drop-down-list 指令时没有出现的一些内存泄漏错误。
这个例子的 plunkr 可以在这里访问:http://plnkr.co/edit/SXhrkGbMnRRgDjI3v2kR?p=preview
下面包含我希望通过覆盖指令控制器内的功能来实现的标记。
<div dir-custom-dropdown="row.controls.customDDL" data-text-field="textfield"
data-value-field="textfield" data-datasource="row.dsSearchAndOr" data-ng-model="row.properties.searchAndOr"></select>
我使用的可重新创建步骤是通过单击前两行上的添加行来创建 2 个新行。单击第二行上的删除行两次以返回到一行。在 Chrome 开发工具中拍摄堆快照,再重复该过程 2 次,然后比较在 Snapshot 1 和 2 之间分配的对象。还有更多信息仍然分配,我有点困惑是什么持有它。
屏幕和剩余部分的示例也可以在此处找到以进行比较:http://imgur.com/LcHhljq
我尝试在某一点保留对 kendo-drop-down-list 的引用并手动调用其方法,但在 kendo.all.js 中的销毁这一行出现错误:
那个._arrow.off();
_arrow 未定义。所以我不确定是否有推荐的方法来清理它,或者这只是不支持,但我们确实需要为 kendo 指令提供包装器来定制我们的应用程序需求。
我确定在为下拉菜单创建隔离范围时我做错了,但这就是我想要走的路。我没有做任何明显的清理工作都会很棒。
【问题讨论】:
-
我可能已经弄清楚了。在 $scope.$on("$destroy", function() 中,我必须手动调用 kendo 的 destroy 方法。我遇到了问题,因为我通过 $index 而不是 row.id 值跟踪 ng-repeat . 添加新项目时,范围会被破坏。稍后我会写一个完整的答案。
标签: javascript angularjs memory-leaks kendo-ui