(19)【ViewHelperの作成】

アドレス帳サンプルアプリの続きです。

続いて、ViewHelperの作成。

■4.一覧画面用ViewHelperの作成

ボタンを押した時の操作を記述するためのViewHelperを作成します。

[新規]-[ActionScriptクラス]
パッケージ:view
クラス名:AddressListViewHelper
スーパークラス:ViewHelper

クラスはこんな感じ。

package view
{
    import com.adobe.cairngorm.view.ViewHelper;
    import com.adobe.cairngorm.control.CairngormEventDispatcher;
    import model.AddressModelLocator;
    import event.AddressSelectEvent;
    import event.AddressRemoveEvent;
    import vo.Address;
    import mx.controls.Alert;
    public class AddressListViewHelper extends ViewHelper{
        public var model : AddressModelLocator = AddressModelLocator.getInstance();
        /**
         * 全件取得
         */
        public function selectAll():void{
            var dto:Address = new Address();
            CairngormEventDispatcher.getInstance().dispatchEvent( new AddressSelectEvent(dto) );
        }
        /**
         * 登録ボタン押下
         */
        public function onInsertBtn():void{
            // ViewStackをAddressForm.mxmlへ切り替え
            this.view.parentDocument.viewstack1.selectedChild
                = this.view.parentDocument.vsAddressForm;
            // 画面の初期化
            this.clearForm();
        }
        /**
         * 修正ボタン押下
         */
        public function onUpdateBtn():void{
            if (this.view.grdAddress.selectedIndex == -1) {
                Alert.show('修正する行が選択されていません。', 'おしらせ');
                return;
            }
            // フォームに値をセット
            this.view.parentDocument.addressForm.lblId.text
                    = this.view.grdAddress.selectedItem.addressid;
            this.view.parentDocument.addressForm.txtName.text
                    = this.view.grdAddress.selectedItem.name;
            this.view.parentDocument.addressForm.txtAddress.text 
                    = this.view.grdAddress.selectedItem.address;
            this.view.parentDocument.addressForm.txtTelno.text 
                    = this.view.grdAddress.selectedItem.telno;
            this.view.parentDocument.addressForm.btnRegist.label 
                    = "修正";
            // ViewStackをAddressForm.mxmlへ切り替え
            this.view.parentDocument.viewstack1.selectedChild
                = this.view.parentDocument.vsAddressForm;
        }
        /**
         * 削除ボタン押下
         */
        public function onRemoveBtn():void{
            if (this.view.grdAddress.selectedIndex == -1) {
                Alert.show('削除する行が選択されていません。', 'おしらせ');
                return;
            }
            // イベント送出
            var dto:Address = new Address();
            dto.addressid = this.view.grdAddress.selectedItem.addressid;
            dto.name = this.view.grdAddress.selectedItem.name;
            dto.address = this.view.grdAddress.selectedItem.address;
            dto.telno = this.view.grdAddress.selectedItem.telno;
            CairngormEventDispatcher.getInstance().dispatchEvent( new AddressRemoveEvent(dto) );
        }
        /**
         * データグリッド押下
         */
        public function onClickDataGrid():void{
        }
        private function clearForm():void{
            // フォームの初期化
            this.view.parentDocument.addressForm.lblId.text = "";
            this.view.parentDocument.addressForm.txtName.text = "";
            this.view.parentDocument.addressForm.txtAddress.text = "";
            this.view.parentDocument.addressForm.txtTelno.text = "";
            this.view.parentDocument.addressForm.btnRegist.label = "登録";
        }
    }
}

■5.登録画面用ViewHelperの作成

同様に登録画面用にViewHelperクラスを作成します。

パッケージ:view
クラス名:AddressFormViewHelper
スーパークラス:ViewHelper

クラスはこんな感じ。

package view
{
    import com.adobe.cairngorm.view.ViewHelper;
    import com.adobe.cairngorm.control.CairngormEventDispatcher;
    import event.AddressInsertEvent;
    import event.AddressUpdateEvent;
    import model.AddressModelLocator;
    import vo.Address;
    /**
     * AddressForm.mxmlのHelper。
     */
    public class AddressFormViewHelper extends ViewHelper{
        public var model : AddressModelLocator = AddressModelLocator.getInstance();
        /**
         * 登録ボタン押下
         */
        public function onRegistBtn():void{
            if(this.view.btnRegist.label === "登録"){
                this.insert();
            }else{
                this.update();
            }
        }
        /**
         * 登録処理
         */
        private function insert():void{
            // 画面の入力値を取得
            var dto:Address = new Address();
            dto.name = this.view.txtName.text;
            dto.address = this.view.txtAddress.text;
            dto.telno = this.view.txtTelno.text;
            // イベント送出
            CairngormEventDispatcher.getInstance().dispatchEvent( new AddressInsertEvent(dto) );
            // 画面を一覧に戻します
            this.onReturnBtn();
        }
        /**
         * 修正処理
         */
        private function update():void{
            // 画面の入力値を取得
            var dto:Address = new Address();
            dto.addressid = this.view.lblId.text;
            dto.name = this.view.txtName.text;
            dto.address = this.view.txtAddress.text;
            dto.telno = this.view.txtTelno.text;
            // イベント送出
            CairngormEventDispatcher.getInstance().dispatchEvent( new AddressUpdateEvent(dto) );
            // 画面を一覧に戻します
            this.onReturnBtn();
        }
        /**
         * 戻るボタン押下
         */
        public function onReturnBtn():void{
            this.view.parentDocument.viewstack1.selectedChild
                = this.view.parentDocument.vsAddressList;
        }
    }
}


・・・読めないな。これ。
次回は、ValueObject,FrontControllerの作成です。