ExtJS 4 - 如何在不同视图中从某个控制器调用函数

Ler*_*ica 8 extjs extjs4 extjs-mvc

我有一个功能,在我的一个控制器中描述.该函数负责创建一个表单,我需要在不同的情况下使用不同的视图.是否可能以及从我需要的视图中调用此函数的方法是什么,而无需在每个控制器中添加相同的代码.

这是控制器的代码,我尝试使用其他控制器的方法:

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
            }
        })

    },
Run Code Online (Sandbox Code Playgroud)

在这里,我尝试使用类似和var contr = Ext.getController('SomeController');......的东西......

askForNotify: function(editor, e) {...
Run Code Online (Sandbox Code Playgroud)

sha*_*sha 20

使其成为全局类的一部分,singleton: true并从代码中的任何位置访问它.只是从视图中调用控制器方法是一种反对MVC范式的...

更新:如果您确实无法更改现有代码 - 请执行以下操作.

在某处保存对您的应用程序的引用(推测您的应用程序定义类似于:

Ext.application({

   launch: function() {
      _myAppGlobal = this;
   }
});
Run Code Online (Sandbox Code Playgroud)

使用此变量获取所需的控制器:

_myAppGlobal.getController('MyController');
Run Code Online (Sandbox Code Playgroud)


Kan*_*han 5

您可以使用此-

this.getController('Controller Name').someFn();
Run Code Online (Sandbox Code Playgroud)