我有一个功能,在我的一个控制器中描述。该函数负责创建一个表单,我需要在不同的情况下使用不同的视图。是否可能,从我需要的视图中调用此函数的方法是什么,而不在每个控制器中添加相同的代码。
以下是我尝试使用其他控制器中的方法的控制器代码:
Ext.define('MY.controller.EventsController', {
extend: 'Ext.app.Controller',
models: [
'EventsRecord'],
stores: [
'Events'],
views: [
'EventsGrid'],
refs: [{
ref: 'EventsGrid',
selector: 'CalendarEvent'
}],
init: function () {
this.control({
'CalendarEvent': {
afterEditFinish: this.askForNotify,
deleteEvent: this.deleteEvent,
calendarEditFunc: this.calendarEditFunc,
addCalendarEvent: this.addCalendarEvent,
itemclick: this.onSelectEnableBtn
}
})
},
在这里,我尝试使用类似var contr = Ext.getController('SomeController');
和......无...
askForNotify: function(editor, e) {...
答案 0 :(得分:20)
使用singleton: true
使其成为全局类的一部分,并从代码中的任何位置访问它。只是从视图中调用控制器方法是一种反对MVC范例......
更新:如果您确实无法更改现有代码 - 请执行以下操作。
在某处保存对您的应用程序的引用(假设您的应用程序定义了类似的内容:
Ext.application({
launch: function() {
_myAppGlobal = this;
}
});
使用此变量获取所需的控制器:
_myAppGlobal.getController('MyController');
答案 1 :(得分:4)
你可以使用它 -
this.getController('Controller Name').someFn();