2009年4月7日火曜日

ExtJs-34 イベントについて

Ext勉強会で教わったことを
やってみようと思って取り込んでみた。

今の構成って
・GridPanel
・Dlg(Window)→Panel→FieldSet
で作ってて、

勉強会でやってたアプリケーションのフレームはまだまだ先伸ばし
にしてる。計画ではGridと詳細のダイアログのCRUDプチフレームワーク作って
その跡にアプリケーションの側を。と。

だから勉強会でやってたAppクラスの代わりに
イベントマネージャクラスみたいなのを作ってそこで管理するようにして
ひとまず固定値で特化したつくりにして突っ込んでみた。
と、動機と現状と構成を。

忘れそうなのでとりあえず概要を残しておこうと。。。

①まずはイベントマネージャクラスを作っておいて。
System.Common.EventManager = Ext.extend( Ext.util.Observable, {
constructor : function() {
// イベント定義
this.addEvents('TodoRegisterDlg_executeClose' );
this.addEvents('TodoRegisterFormPanel_Reset' );
this.addEvents('TodoRegisterFormPanel_Submit' );
this.addEvents('TodoRegisterFormPanel_Load' );
this.addEvents('TodoRegisterFormPanel_CopyNew' );
}
});

②ダイアログクラスに引き渡す。
//TODO:暫定配置
App.TaskManegement.TodoBasicGird.eventManager = new System.Common.EventManager();
//----------------------------------------
// create detail dlg
//----------------------------------------
var todoListgrid_createDetailDlg = function( id )
{
// Dlg設定
if( App.TaskManegement.TodoBasicGird.detailDlg === undefined )
{
App.TaskManegement.TodoBasicGird.detailDlg = new App.TaskManegement.TodoRegisterDlg({ eventManager : App.TaskManegement.TodoBasicGird.eventManager});
}
// load設定
if( id != undefined && id != '' )
{
//App.TaskManegement.TodoBasicGird.detailDlg.load( id );
//イベント発火
App.TaskManegement.TodoBasicGird.eventManager.fireEvent('TodoRegisterFormPanel_Load', id );
}
else
{
//コントロールの初期化
App.TaskManegement.TodoBasicGird.detailDlg.reset();
}
App.TaskManegement.TodoBasicGird.detailDlg.show();
};

③ダイアログクラスから内部で使用するパネルクラスへ引き渡す。
App.TaskManegement.TodoRegisterDlg = Ext.extend( Ext.Window, {
initComponent : function()
{
//イベントリスナ登録
this.eventManager.on('TodoRegisterDlg_executeClose', executeClose, this );
Ext.apply( this,
{
closeAction : 'hide',
tools : todo_tools,
title : 'タスク情報編集',
width : 980,
height : 400,
bodyStyle : "padding:0px",
items : [ new App.TaskManegement.TodoRegisterFormPanel({eventManager : this.eventManager})],
eventManager : this.eventManager
});
App.TaskManegement.TodoRegisterDlg.superclass.initComponent.call( this );
},
executeClose : function()
{
App.TaskManagement.TodoRegisterDlg.superclass.close.call();
}


});

てな具合で。
流動的な部分の切り出しなんてまだまだ先だな。
というか、ここのところ時間が取れていないなぁ。
このままだとExt勉強時間が2~3時間/月になってしまう。

趣味のプログラミングなんてこんなものか。。

0 件のコメント: