我对控制器上的xtype和别名感到困惑。它是我的控制器,我从未添加过xtype或别名。是默认创建的,我似乎没有在控制器实例上找到它。
据我所知,虽然我可能是错的,如果我创建一个xtype,那么别名会自动分配一个小部件的前缀?这是否也适用于别名创建,而xtype将被分配更少的小部件前缀?
我问的原因是我在另一个控制器中执行getController,我想知道是否可以在另一个控制器下使用xtype分配一个ref。
这可能吗?或者我应该总是调用getController吗?
由于
答案 0 :(得分:0)
您应该使用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']);
});
您也可以(我更喜欢这个,因为异步应用程序应该是事件驱动的)侦听从控制器触发的事件:
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');
}
});