我对控制器上的xtype和别名有点困惑。这是我的控制器,我从未添加xtype或别名。是否默认创建一个?我似乎在控制器示例上找不到它。据我所知,如果我创建一个xtype,那么一个别名会自动分配一个widget前缀?别名创建和xtype的分配是否也会减少小部件前缀?我之所以问这个问题,是因为我正在另一个控制器中执行getController,我想知道是否可以在另一个控件下使用xtype分配ref。这可能吗?或者我应该始终呼叫getController?
carvr3hs1#
您应该使用getController获取对另一个控制器的引用。无法使用别名或xtype。如果您可以在控制器B上设置控制器A的参考,反之亦然,会发生什么?但是……还有其他方法可以从其他控制器调用方法。不过,这些示例尚未经过测试。例如,您可以从控制器b上的控制器a借用方法:
getController
Ext.define('MyApp.app.ControllerA', { extend : 'Ext.app.Controller', requires : [ 'MyApp.app.ControllerB' ], ... }, function(Controller) { Controller.borrow(MyApp.app.ControllerB, ['methodA', 'methodB', 'methodC', 'methodD']); });
您还可以(我更喜欢这个,因为异步应用程序应该是事件驱动的)侦听从控制器触发的事件:
Ext.define('MyApp.controller.ControllerA', { extend: 'Ext.app.Controller', id: 'controllerAId', init: function() { var me = this; me.fireEvent('bar'); } }); Ext.define('MyApp.controller.ControllerB', { extend: 'Ext.app.Controller', init: function() { var me = this; me.listen({ global: { ... }, controller: { '*': { foobar: 'onAnyFooBar' }, '#controllerAId': { bar: 'onFooBar' } }, component: { ... }, store: { ... } }); }, onFooBar: function(controller) { console.log('Controller B', 'onFooBar'); } });
jfewjypa2#
我会去监听你试图访问的控制器中的事件,你可以从任何地方触发它。使用getControlller(App.controller.controllerName)的问题是,如果文件没有加载,它会将其加载到应用程序中,这可能会有一些负面的性能问题(例如,如果控制器很大,可能需要很长时间才能从服务器中提取资源等)。
2条答案
按热度按时间carvr3hs1#
您应该使用
getController
获取对另一个控制器的引用。无法使用别名或xtype。如果您可以在控制器B上设置控制器A的参考,反之亦然,会发生什么?但是……还有其他方法可以从其他控制器调用方法。不过,这些示例尚未经过测试。
例如,您可以从控制器b上的控制器a借用方法:
您还可以(我更喜欢这个,因为异步应用程序应该是事件驱动的)侦听从控制器触发的事件:
jfewjypa2#
我会去监听你试图访问的控制器中的事件,你可以从任何地方触发它。使用getControlller(App.controller.controllerName)的问题是,如果文件没有加载,它会将其加载到应用程序中,这可能会有一些负面的性能问题(例如,如果控制器很大,可能需要很长时间才能从服务器中提取资源等)。