8

コントローラーの1つに記述されている機能があります。この関数は、さまざまなビューからさまざまなケースで使用する必要のあるフォームの作成を処理します。各コントローラーに同じコードを追加せずに、必要なビューからこの関数を呼び出す方法はありますか?

他のコントローラーのメソッドを使用しようとしているコントローラーのコードは次のとおりです。

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 に答える