2

私は新しい ExtJs 5 を試しています。ExtJs5 の定義された MVC パターンに従って小さなアプリを作成しました。

ViewControllersそれぞれに使用していますView

問題の説明: ここで、2 つの VC (Controller1 と Controller2) があるとします。それぞれ独自の方法があります。Controller1からController2のメソッドを呼び出したい。Controller1 から Controller2 に関連付けられたビューを更新したいと考えています。

E.g. Suppose there is a separate view for Status Bar and a ViewController(StatusBarController). 
This VC has a method to update the view based on whatever message it receives as input parameter. 
All the other controllers in the application will call this VCs method to update the status of the application on the status bar.

以前のバージョンでthis.getController('StatusBarController')は、任意のコントローラーへのハンドルを取得し、そのメソッドを呼び出すために使用されていました。

しかし、ViewController を使用する場合、これは私の場合には機能しません。

このことを達成する方法を教えてもらえますか?また、それがそのようなことを行うための正しい/理想的な方法なのか、それともより良いオプションがあるのか​​?

これが私のコードです:

ステータスバービュー:

Ext.define('MyApp.view.statusbar.StatusBarView', {
extend : 'Ext.panel.Panel',
controller: 'StatusBarController',
region : 'south',
xtype : 'status-bar-panel',
html : 'This is a status bar'
});

ステータスバーコントローラー:

Ext.define('MyApp.controller.StatusBarController', {
extend : 'Ext.app.ViewController',
alias: 'controller.StatusBarController',
updateStatusBar : function(message) {
    this.getStatusBarView().update(message);
}   
});

アプリ内のその他のコントローラー:

Ext.define('MyApp.controller.ResourcesPanelController', {
extend : 'Ext.app.ViewController',
alias : 'controller.ResourcesController',
onItemClick : function(tree, record, item, index, e, eOpts) {
            // here I am calling the other controller's method.
    this.getController('StatusBarController').updateStatusBar(
            record.data.text + ' has been clicked');
}
});
4

2 に答える 2

0

私の答えはシンプルで短いです: Ext.app.ViewController.fireEvent()

ビューコントローラーのリスナー構成を使用して任意のタイプのカスタムイベントを追加できますが、リッスン構成状態のドキュメントは「イベントドメイン」であるため、できるようにするために両方のコントローラーが同じドメイン内に存在する必要があると思いますイベントごとにやり取りします。

.fireEvent() の 2 番目の引数は、通常イベントをトリガーする要素を模倣する必要がある場合があります。

まあ、そのようにアクセスすることもできるはずです(セカンダリコントローラーで):

this.getApplication().getStatusBarController().updateStatusBar('...');
于 2014-07-10T03:44:39.543 に答える