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

时间:2012-06-18 12:17:10

标签: 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
            }
        })

    },

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

的内容
askForNotify: function(editor, e) {...

2 个答案:

答案 0 :(得分:20)

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

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

在某处保存对您的应用程序的引用(假设您的应用程序定义了类似的内容:

Ext.application({

   launch: function() {
      _myAppGlobal = this;
   }
});

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

_myAppGlobal.getController('MyController');

答案 1 :(得分:4)

你可以使用它 -

this.getController('Controller Name').someFn();