ExtJS:在控制器上缺少 xtype / 别名,在 refs 中使用?
Posted
技术标签:
【中文标题】ExtJS:在控制器上缺少 xtype / 别名,在 refs 中使用?【英文标题】:ExtJS: Missing xtype / alias on a Controller, using in refs? 【发布时间】:2015-09-11 15:37:43 【问题描述】:我对控制器上的 xtype 和别名有点困惑。它是我的控制器,我从未添加过 xtype 或别名。是不是默认创建的,我在控制器实例上好像没找到。
据我所知,虽然我可能是错的,但如果我创建一个 xtype,那么一个别名会自动分配一个小部件前缀?别名创建也是如此,并且 xtype 将被分配更少的小部件前缀?
我问的原因是我在另一个控制器中执行 getController,我想知道是否可以在另一个控制器下使用 xtype 分配一个 ref。
这可能吗?还是我应该总是调用 getController?
谢谢
【问题讨论】:
【参考方案1】:您应该使用getController
来获取对另一个控制器的引用。没有办法使用别名或 xtype。如果您可以在控制器 B 上设置控制器 A 的引用,反之亦然,会发生什么?
但是...还有其他方法可以从另一个控制器调用方法。不过,此示例未经测试。
例如,您可以在控制器 b 上从控制器 a 借用方法:
Ext.define('MyApp.app.ControllerA',
extend : 'Ext.app.Controller',
requires : [
'MyApp.app.ControllerB'
],
...
, function(Controller)
Controller.borrow(MyApp.app.ControllerB, ['methodA', 'methodB', 'methodC', 'methodD']);
);
您还可以(我更喜欢这个,因为 imo 异步应用程序应该是事件驱动的)监听从控制器触发的事件:
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');
);
【讨论】:
【参考方案2】:我会在你试图访问的控制器中监听一个事件,你可以从任何你想要的地方触发它。使用 getController(App.controller.controllerName) 的问题是,如果文件未加载,它会将其加载到您的应用程序中,这可能会产生一些负面的性能问题(即,如果控制器很大可能需要很长时间才能从服务器等中提取资源)。
【讨论】:
以上是关于ExtJS:在控制器上缺少 xtype / 别名,在 refs 中使用?的主要内容,如果未能解决你的问题,请参考以下文章