如何删除控制器 ExtJS?

Posted

技术标签:

【中文标题】如何删除控制器 ExtJS?【英文标题】:How to Delete controller ExtJS? 【发布时间】:2012-09-08 12:48:44 【问题描述】:

我像这样在我的应用程序中动态创建控制器:

var loadedController = me.app.getController(controller_name);
            loadedController.init();

使用后如何删除此控制器? 谢谢。

【问题讨论】:

【参考方案1】:

ExtJs 目前不支持开箱即用的移除控制器。要清理控制器,请执行以下操作:

使用方法uncontrol 扩展Ext.app.EventBus,该方法取消注册此控制器在EventBus 上注册的所有事件侦听器。查看Ext.app.EventBus#control 的源代码以派生实现。或使用this one。 使用方法removeController 扩展Ext.app.Application,从controllers 集合中删除给定的控制器实例。这是一个 Ext.util.MixedCollection,查看Ext.app.Application#getController 的源代码。然后使用 uncontrol 清理该控制器的所有已注册侦听器。 在您的特定控制器上实现destroy 方法和/或扩展Ext.app.Controller。如果适合您的应用程序架构和控制器生命周期,您至少应该调用 clearManagedListeners() 并可能销毁此控制器创建的其他对象,例如视图或存储。

【讨论】:

很好的答案,你深入研究了这个话题:) 好答案!这应该放在 sencha 的功能请求中 好答案,您涵盖了所有必须删除的内容:) 您如何测试控制器是否真的被删除? 您是在问如何检查特定的 javascript 对象是否已被 JavaScript 引擎垃圾回收?【参考方案2】:

已在 Sencha 论坛上发起高级会员请求。不幸的是,最初的请求自 8 月以来一直存在,没有任何消息。我刚刚参考这个帖子提出了这个请求。

The Sencha Forum Topic (Premium section)

【讨论】:

【参考方案3】:

您可以使用obj.destroy() 销毁任何 Ext 类。 请记住还要删除对该对象的所有引用,以便对其进行垃圾回收。

【讨论】:

【参考方案4】:

getController() 方法创建一个新的控制器对象并将对它的引用存储在controllers 数组中。

这意味着,如果控制器是使用getController() 加载的,它不会被删除,因为在Application 对象的controllers 属性中总是至少有一个对它的引用。

要以这样一种方式加载控制器,一旦它失去对现有对象(DOM 元素、Ext 组件、它的视图等)的任何引用,它就会被销毁(释放它占用的内存),应该使用Ext.create而不是getController()。 代码如下:

var loadedController = Ext.create(
     me.app.getModuleClassName(controller_name, 'controller'),
     
         application: me.app,
         id: Ext.id(null, 'controller')
     
);
loadedController.init(me.app);
loadedController.onLaunch(me.app);

loadedController 将是局部变量,并将脱离作用域。唯一能继续将新创建的控制器绑定到“现实生活”的将是控制器自己创建的元素。 例如,控制器可以在其onLaunch() 方法中创建一个新视图,该视图将被注入到DOM 中,并且控制器将使用其init() 方法中的处理程序绑定来监听视图事件。只要视图存在,控制器就会存在。但是当用户关闭视图时,视图将被销毁,因为它是对我们控制器的最后一次引用,控制器也将被销毁。

更新 使用控制器创建的侦听器被附加到 Ext.app.EventBus 并且可能会阻止自动删除控制器,因为它们还可能保留对该控制器的引用。

【讨论】:

以上是关于如何删除控制器 ExtJS?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除商店extjs中的重复值

Extjs4 localstorage -- 如何删除所有记录?

如何删除EXTJS中特定行的汇总分组

如何从ExtJs网格中删除列?

如何在 extjs 中重新添加已删除的选项卡

如何在下一个请求中删除 extjs 中的动态参数?