ここに私がしていることがあります: 私は上にツールバーがあり、左側のナビゲーションがあり、中央の場所は作業領域 (基本的にはタブパネル) です。アプリケーションの各部分を取り上げて説明しましょう。まず、ビューポートがどのように見えるかを次に示します。
Ext.define('App.view.Viewport',{
extend: 'Ext.container.Viewport',
layout: 'border',
requires: [
'App.view.menu.NavigationPane',
'App.view.CenterPane',
'App.view.menu.Toolbar'
],
initComponent: function() {
Ext.apply(this, {
items: [{
region: 'north',
xtype: 'panel',
height: 24,
tbar: Ext.create('App.view.menu.Toolbar')
},{
title: 'Navigation Pane',
region: 'west',
width: 200,
layout: 'fit',
collapsible: true,
collapsed: true,
items: Ext.create('App.view.menu.NavigationPane')
},{
region: 'center',
xtype: 'centerpane'
}]
});
this.callParent(arguments);
}
});
メニューと左側のナビゲーション (App.view.menu.NavigationPane) を備えたツールバー (App.view.menu.Toolbar) があることがわかります。これら 2 つのコンポーネントは、メイン メニューまたは他のモジュールへのゲートウェイを構成します。ユーザーがメニュー項目を選択すると、適切なモジュール ビュー (フォーム、グリッド、グラフなど) が「センターペイン」に読み込まれます。センターペインは、Ext.tab.Panel の派生クラスに他なりません。
あなたが言ったように、ツールバーとナビゲーション ペインからのすべての要求を処理するメイン コントローラーがあります。ツールバーとナビゲーション ペインのクリック アクションのみを処理しました。これが私のAppControllerです:
Ext.define('CRM.controller.AppController',{
extend: 'Ext.app.Controller',
init: function() {
this.control({
'apptoolbar button[action="actionA"]' : {
click : function(butt,evt) {
this.application.getController('Controller1').displayList();
}
},
.
. // Add all your toolbar actions & navigation pane's actions...
.
'apptoolbar button[action="actionB"]' : {
click : function(butt,evt) {
this.application.getController('Controller2').NewRequest();
}
}
});
}
});
ボタンのハンドラーの 1 つを見てください。「アプリケーション」プロパティを介してコントローラーを取得します。
this.application.getController('Controller2').NewRequest();
getController メソッドを使用して、コントローラーのインスタンスを取得し、コントローラー内の任意のメソッドを呼び出します。次に、モジュールのコントローラーのスケルトンを見てみましょう。
Ext.define('CRM.controller.Controller2',{
extend: 'Ext.app.Controller',
refs: [
{ref:'cp',selector: 'centerpane'}, // reference to the center pane
// other references for the controller
],
views: ['c2.CreateForm','c2.EditForm','c2.SearchForm','c2.SearchForm'],
init: function() {
this.control({
'newform button[action="save"]' : {
// Do save action for new item
},
'editform button[action="save"]' : {
// update the record...
},
'c2gridx click' : {
// oh! an item was click in grid view
}
});
},
NewRequest: function() {
var view = Ext.widget('newform');
var cp = this.getCp(); // Get hold of the center pane...
cp.add(view);
cp.setActiveTab(view);
},
displayList: function() {
// Create grid view and display...
}
});
私のモジュールのコントローラーには、そのモジュールに関連するアクション (モジュールのグリッド、フォームなど) しかありません。これは、正しい方向に転がり始めるのに役立つはずです。