8

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

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

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');and..nothing..

askForNotify: function(editor, e) {...
4

2 回答 2

20

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

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

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

Ext.application({

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

使用这个变量来获得你想要的控制器:

_myAppGlobal.getController('MyController');
于 2012-06-18T13:55:53.177 回答
5

你可以使用这个 -

this.getController('Controller Name').someFn();
于 2013-02-16T09:48:19.217 回答