您应该使用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');
}
});