Package | jp.co.fujitsu.reffi.client.flex.controller |
Class | public class BaseController |
Inheritance | BaseController ![]() |
Implements | IController, mx.core.IMXMLObject |
[概 要]
アクションとモデルを制御する基底コントローラクラスです.[詳 細]
コントローラは大きく分けて二つの役割を担います。1.コンポーネント、イベント、アクションの紐付け
BaseControllerを継承した具象コントローラクラスのbind(EventBinder)をオーバーライド実装することで、
コンポーネント、イベント、アクションの紐付けを行います。
画面表示リストに該当のコンポーネントが挿入された時、紐付けられた情報を元にイベントリスナ、
ハンドラ登録を行います。
2.イベント発生時の処理フロー形成
1で登録されたイベントが発生した時、handlerFacade()が全てのイベントハンドリングの
入り口となります。
イベント処理を委譲されたBaseControllerは以下の処理フローを作ります。
実行順序 | BaseAction | BaseController | BaseModel |
1 | handlerFacade() | ||
2 | invoke() | ||
3 | runAction() | ||
4 | run() | ||
5 | runModels() | ||
5´ | runModelsAndNoWait() | ||
6 | run() | ||
7 | モデル処理監視リスナ(成功) | ||
8 | successForward() | ||
7´ | モデル処理監視リスナ(失敗) | ||
8´ | failureForward() | ||
9 | trap() | ||
10 | handlerFinalize() | ||
11 | modelsDone() | ||
12 | complete() |
[備 考]
package demo.client.controller { import demo.client.chat.action.ChannelStartAction; import demo.client.chat.action.ChannelStopAction; import demo.client.chat.action.ChatWindowCloseAction; import demo.client.chat.action.EnterChannelAction; import demo.client.chat.action.LeaveChannelAction; import demo.client.chat.action.RemarkSendAction; import demo.client.componentSearch.action.ComponentSearchCreationCompleteAction; import demo.client.componentSearch.action.SearchAction; import demo.client.custom.action.AbortRowDataAction; import demo.client.custom.action.ChangeColumnAction; : : : import flash.events.Event; import flash.events.FocusEvent; import flash.events.MouseEvent; import jp.co.fujitsu.reffi.client.flex.controller.BaseController; import jp.co.fujitsu.reffi.client.flex.controller.EventBinder; import mx.events.CloseEvent; import mx.events.FlexEvent; import mx.events.IndexChangedEvent; public class DemoController extends BaseController { // コントローラ(アプリケーション)初期化処理を実装します override protected function initialize(clientConfig:ClientConfig):void { } // コンポーネントイベントとアクションの紐付けを定義します override protected function bind(eventBinder:EventBinder):void { // メニュー画面アクション eventBinder.addEventBinding("Index.openTop", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openChat", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openForm", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openWindowGroupMenu", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.lineupWindows", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openServerPush", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openPDF", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openDataGrid", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openWSRequest", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openUserInteractive", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openComponentSearch", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.openSpring", MouseEvent.CLICK, Class(demo.client.index.action.ViewStackChangeAction)); eventBinder.addEventBinding("Index.blackStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction)); eventBinder.addEventBinding("Index.blueStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction)); eventBinder.addEventBinding("Index.greenStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction)); eventBinder.addEventBinding("Index.grayStyleRadioButton", MouseEvent.CLICK, Class(demo.client.index.action.StyleRadioButtonClickAction)); // トップ画面 eventBinder.addEventBinding("Top.menuLogoImage", FlexEvent.CREATION_COMPLETE, Class(demo.client.top.action.ImageCreationCompleteAction)); // チャットデモ画面アクション eventBinder.addEventBinding("chat.channelStartButton", MouseEvent.CLICK, Class(demo.client.chat.action.ChannelStartAction)); eventBinder.addEventBinding("chat.channelStopButton", MouseEvent.CLICK, Class(demo.client.chat.action.ChannelStopAction)); eventBinder.addEventBinding("chat.enterChannel", MouseEvent.CLICK, Class(demo.client.chat.action.EnterChannelAction)); eventBinder.addEventBinding("chat.handleName", FlexEvent.ENTER, Class(demo.client.chat.action.EnterChannelAction)); eventBinder.addEventBinding("chat.leaveChannel", MouseEvent.CLICK, Class(demo.client.chat.action.LeaveChannelAction)); eventBinder.addEventBinding("chat.remarkSend", MouseEvent.CLICK, Class(demo.client.chat.action.RemarkSendAction)); eventBinder.addEventBinding("chat.chatRemark", FlexEvent.ENTER, Class(demo.client.chat.action.RemarkSendAction)); eventBinder.addEventBinding("chat.chatWindow", Event.CLOSE, Class(demo.client.chat.action.ChatWindowCloseAction)); } // 毎イベント最終共通処理を実装します override protected function handlerFinalize(parameterMapping:ParameterMapping):void { } } }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controller="demo.client.controller.*"> <controller:DemoController name="demoController" /> : :
Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.
Property | Defined by | ||
---|---|---|---|
application : Application [概 要] このコントローラが制御するmx:Applicationインスタンスです. | BaseController | ||
clientConfig : ClientConfig
[static]
[概 要] フレームワークの挙動情報を保持するオブジェクトです. | BaseController | ||
controllers : Dictionary [static]
[概 要] AVMにロードされているBaseController継承オブジェクト群を保持するオブジェクトです. | BaseController | ||
eventBinder : EventBinder
[概 要] 一アプリケーション(一SWF)内のイベント定義情報が格納されたオブジェクトです. | BaseController | ||
name : String [概 要] このコントローラの名前です。デフォルトではクラス型名が入ります. | BaseController | ||
permanent : Dictionary [概 要] nアプリケーション(nSWF)間で共有可能な恒久領域です. | BaseController |
Method | Defined by | ||
---|---|---|---|
[概 要] デフォルトコンストラクタです. | BaseController | ||
getController(application:Application):BaseController
[static]
[概 要] 引数applicationを管理しているBaseControllerインスタンスを返却します. | BaseController | ||
handlerFacade(event:Event):void
[概 要] 全ユーザ定義イベントをハンドルする入り口になるメソッドです. | BaseController | ||
initialized(document:Object, id:String):void
[概 要] このコントローラタグがApplicationの子要素としてパースされた時点でAVMによってコールバックされるメソッドです. | BaseController | ||
invoke(actionClass:Class, parameterMapping:ParameterMapping, completeHandler:Function = null, failureHandler:Function = null):void
[概 要] コントローラの主幹メソッドです. | BaseController | ||
removeEvents(event:Event):void
[概 要] 削除された画面コンポーネントに付与されているイベントリスナを削除します. | BaseController | ||
[概 要] イベントに対応するアクションを実行します. | BaseController | ||
[概 要] 機能モデルを単体実行します. | BaseController | ||
runModels(models:Array, mapping:ParameterMapping, index:int = 0, modelProcessEvent:ModelProcessEvent = null):void
[概 要] アクションで予約されたモデル群をインスタンス化して連続実行します. | BaseController | ||
runModelsAndNoWait(models:Array, mapping:ParameterMapping):void
[概 要] アクションで予約されたモデル群をインスタンス化して連続実行します. | BaseController | ||
trap(error:*):void
[概 要] Controller、Action、Model各レイヤで発生したエラーを最終的に一元ハンドルするメソッドです. | BaseController |
Method | Defined by | ||
---|---|---|---|
bind(eventBinder:EventBinder):void
[概 要] MXMLで定義されたコンポーネントと、アクションを紐付けるメソッドです. | BaseController | ||
createParameterMapping(event:Event):ParameterMapping
[概 要] MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します. | BaseController | ||
handlerFinalize(parameterMapping:ParameterMapping):void
[概 要] 各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです. | BaseController | ||
initialize(clientConfig:ClientConfig):void
[概 要] 初期化処理が記述可能なメソッドです. | BaseController | ||
modelsDone(parameterMapping:ParameterMapping):void
[概 要] 1アクションに登録されている機能モデル群が全て終了した契機でコールされます. | BaseController |
application | property |
application:Application
[read-write]
[概 要]
このコントローラが制御するmx:Applicationインスタンスです.[詳 細]
このコントローラを記述したタグの親ノードとなるApplicationを示すプロパティです。<?xml version="1.0" encoding="utf-8"?> <mx:Application name="testApp" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controller="demo.client.controller.*"> <controller:TestController name="testController" /> : :
[備 考]
実装 public function get application():Application
public function set application(value:Application):void
clientConfig | property |
clientConfig:ClientConfig
[read-write]
[概 要]
フレームワークの挙動情報を保持するオブジェクトです.[詳 細]
コントローラ初期化時(BaseController#initilize())に引数として渡るオブジェクトです。[備 考]
実装 public static function get clientConfig():ClientConfig
public function set clientConfig(value:ClientConfig):void
controllers | property |
controllers:Dictionary
[read-write]
[概 要]
AVMにロードされているBaseController継承オブジェクト群を保持するオブジェクトです.[詳 細]
A.swf(AControllerクラスが管理)とB.swf(BControllerクラスが管理)が読み込まれている場合、 以下のようにコントローラインスタンスが保持されます。controllers:Dictionary "AControllerのnameプロパティ値" = AController instance "BControllerのnameプロパティ値" = BController instance
[備 考]
実装 public static function get controllers():Dictionary
public function set controllers(value:Dictionary):void
関連項目
eventBinder | property |
eventBinder:EventBinder
[read-write]
[概 要]
一アプリケーション(一SWF)内のイベント定義情報が格納されたオブジェクトです.[詳 細]
[備 考]
実装 public function get eventBinder():EventBinder
public function set eventBinder(value:EventBinder):void
関連項目
name | property |
name:String
[read-write]
[概 要]
このコントローラの名前です。デフォルトではクラス型名が入ります.[詳 細]
AVM上に複数のSWF(Application)がロードされる場合、Applicationを管理する コントローラを識別する為のキーとして使用されます。[備 考]
読み込まれる各SWFを管理するコントローラクラス名が同一である場合、 コントローラを識別することが出来ません。
実装
public function get name():String
public function set name(value:String):void
関連項目
permanent | property |
permanent:Dictionary
[read-write]
[概 要]
nアプリケーション(nSWF)間で共有可能な恒久領域です.[詳 細]
A.swfとB.swfが読み込まれている場合、AControllerとBControllerで同じ領域が参照されます。[備 考]
実装 public function get permanent():Dictionary
public function set permanent(value:Dictionary):void
BaseController | () | constructor |
public function BaseController()
[概 要]
デフォルトコンストラクタです.[詳 細]
describeType(this)の結果、取得するXMLのtypeノードからname属性を取り出します。 取り出したname属性はクラス型名のみ切り出します。 取得されたクラス名はnameプロパティに設定されます。[備 考]
nameプロパティに設定された名前は、BaseController#controllersに格納される、 このコントローラオブジェクトのキーになります。bind | () | method |
protected function bind(eventBinder:EventBinder):void
[概 要]
MXMLで定義されたコンポーネントと、アクションを紐付けるメソッドです.[詳 細]
具象コントローラでこのメソッドをオーバーライドして、コンポーネントのイベント発生時に 実行するアクションクラスを紐付けます。[備 考]
パラメータeventBinder:EventBinder — イベント紐付け情報保持オブジェクト
|
関連項目
createParameterMapping | () | method |
protected function createParameterMapping(event:Event):ParameterMapping
[概 要]
MVC各レイヤを巡回するParameteraMappingオブジェクトを生成、初期化します.[詳 細]
イベント発生の際、Controller、Action、Modelを流れるデータマップを作成します。[備 考]
パラメータevent:Event |
ParameterMapping —
MVC各レイヤを巡回するパラメータオブジェクト
|
getController | () | method |
public static function getController(application:Application):BaseController
[概 要]
引数applicationを管理しているBaseControllerインスタンスを返却します.[詳 細]
controllersプロパティを走査して引数applicationと同じapplicationを持つ コントローラを返却します。[備 考]
パラメータapplication:Application — コントローラを識別する為のApplicationオブジェクト
|
BaseController |
handlerFacade | () | method |
public function handlerFacade(event:Event):void
[概 要]
全ユーザ定義イベントをハンドルする入り口になるメソッドです.[詳 細]
発生したイベントタイプ、イベントを起こしたコンポーネント名を元に、[備 考]
bind(EventBinder)で定義したイベントは全てこのメソッドがハンドリングします。パラメータ
event:Event — 発生イベント
|
handlerFinalize | () | method |
protected function handlerFinalize(parameterMapping:ParameterMapping):void
[概 要]
各ユーザ定義イベントハンドリングの最後にテンプレートコールされるメソッドです.[詳 細]
デフォルト処理は有りません。[備 考]
このメソッドを具象コントローラでオーバーライドすると、全イベントアクションの 共通実行後処理を実装出来ます。 パラメータparameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
|
initialize | () | method |
protected function initialize(clientConfig:ClientConfig):void
[概 要]
初期化処理が記述可能なメソッドです.[詳 細]
具象コントローラがApplicationの子要素として認識されたタイミングでテンプレートコールされます。[備 考]
業務固有の初期化処理が必要な場合は、具象コントローラ内でこのメソッドをオーバーライドして下さい。clientConfig:ClientConfig — フレームワーク挙動情報を保持するオブジェクトです
|
override protected function initialize(clientConfig:ClientConfig):void { // アクションでモデル予約が無かった場合に動作させるデフォルトモデルクラスを設定 clientConfig.defaultModelClass = Class(DemoSystemDefaultModel); // エラー発生時にコントローラによるエラー表示を抑止する clientConfig.showAlertOnError = false; }
initialized | () | method |
public final function initialized(document:Object, id:String):void
[概 要]
このコントローラタグがApplicationの子要素としてパースされた時点でAVMによってコールバックされるメソッドです.[詳 細]
このコントローラの親要素であるApplication、及びApplicationを管理するSystemManagerに対して、[備 考]
パラメータdocument:Object — このコントローラがタグとして配置されたApplication
|
|
id:String — タグとして配置されたコントローラのid属性値
|
invoke | () | method |
public function invoke(actionClass:Class, parameterMapping:ParameterMapping, completeHandler:Function = null, failureHandler:Function = null):void
[概 要]
コントローラの主幹メソッドです.[詳 細]
コントローラ処理フローの幹を形成します。 このメソッドのtryスコープで以下が行われます。[備 考]
パラメータactionClass:Class — 画面コンポーネントから発生したイベントオブジェクト
|
|
parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
|
|
completeHandler:Function (default = null ) — invoke成功時に呼ばれる関数(デフォルト:null)
|
|
failureHandler:Function (default = null ) — invoke失敗時に呼ばれる関数(デフォルト:null)
|
modelsDone | () | method |
protected function modelsDone(parameterMapping:ParameterMapping):void
[概 要]
1アクションに登録されている機能モデル群が全て終了した契機でコールされます.[詳 細]
アクションでの登録モデル群が全て完了した時の共通処理を記述します。[備 考]
パラメータparameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
|
removeEvents | () | method |
public function removeEvents(event:Event):void
[概 要]
削除された画面コンポーネントに付与されているイベントリスナを削除します.[詳 細]
削除されたコンポーネントがeventBinderプロパティに登録されているname属性を持つ場合、[備 考]
パラメータevent:Event — このコントローラが管理するAppicationからコンポーネントが削除されたremovedイベント
|
runAction | () | method |
public function runAction(actionClass:Class, parameterMapping:ParameterMapping):ParameterMapping
[概 要]
イベントに対応するアクションを実行します.[詳 細]
引数で指定されたアクションクラス型をインスタンス化、 実行(BaseAction#run(ParameterMapping))します。[備 考]
この結果がnullだった場合はコントローラの以降の処理は中止されます。 BaseAction#run(ParameterMapping)がnullを返却するのは、 prepareがfalseを返却、もしくはvalidate結果がエラーだった場合があります。 パラメータactionClass:Class — 実行するアクションクラスの型
|
|
parameterMapping:ParameterMapping — MVCを巡回するパラメータマッピング
|
ParameterMapping —
アクション実行後のParameterMappingオブジェクト
|
runModel | () | method |
public function runModel(model:BaseModel, parameterMapping:ParameterMapping):void
[概 要]
機能モデルを単体実行します.[詳 細]
BaseAction#reserveModels等で登録した以外のモデルを実行する際に使用します。[備 考]
パラメータmodel:BaseModel — 実行する機能モデルインスタンス
|
|
parameterMapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
|
runModels | () | method |
public function runModels(models:Array, mapping:ParameterMapping, index:int = 0, modelProcessEvent:ModelProcessEvent = null):void
[概 要]
アクションで予約されたモデル群をインスタンス化して連続実行します.[詳 細]
BaseAction#reserveModels(Array)で予約されたBaseModel実装モデル群を実行します。
モデル実行直前にBaseAction#nextModel(int, ModelProcessEvent, Model)がコールバックされます。
実行モデルへのパラメータ設定を上記メソッドで行うことが出来ます。
モデル実行後、成功時はBaseAction#successForward(int, Model, Object)が、
失敗時はBaseAction#failureForward(int, Model, Exception)がコールバックされます。
モデルの実行結果は上記メソッドで取得することが出来ます。
[備 考]
BaseAction#isRunModelsAndNoWait() がfalseの場合、同期モードで実行されます。models:Array — BaseAction#reserveModels(Array) で予約されたモデルクラス群
|
|
mapping:ParameterMapping — MVC各レイヤを伝播するパラメータ
|
|
index:int (default = 0 ) — モデル実行順序インデックス
|
|
modelProcessEvent:ModelProcessEvent (default = null ) — 直前に実行したモデルの処理結果イベントオブジェクト
|
関連項目
runModelsAndNoWait | () | method |
public function runModelsAndNoWait(models:Array, mapping:ParameterMapping):void
[概 要]
アクションで予約されたモデル群をインスタンス化して連続実行します.[詳 細]
BaseAction#reserveModels(Array)で予約されたBaseModel実装モデル群を実行します。
モデル実行後、成功時はBaseAction#successForward(int, Model, Object)が、
失敗時はBaseAction#failureForward(int, Model, Exception)がコールバックされます。
モデルの実行結果は上記メソッドで取得することが出来ます。
[備 考]
BaseAction#isRunModelsAndNoWait() がtrueの場合、非同期モードで実行されます。models:Array — BaseAction#reserveModels(Array) で予約されたモデルクラス群
|
|
mapping:ParameterMapping — MVC各レイヤを伝播するパラメータオブジェクト
|
関連項目
override protected function isRunModelsAndNoWait():Boolean { return true; }
trap | () | method |
public function trap(error:*):void
[概 要]
Controller、Action、Model各レイヤで発生したエラーを最終的に一元ハンドルするメソッドです.[詳 細]
MVC各レイヤで発生したエラーが最終的にキャッチされます。[備 考]
パラメータerror:* — 発生したエラー、またはエラーイベント
|