0

そこで、これらのウィンドウがそれらに記述された静的関数によって呼び出される、この TitleWindow ベースの Flex アプリケーションを取得しました。エンティティを DataGrid から作成または編集する必要がある場合は、次のようになります。

private function incluir():void {
    NavioForm.incluir(dg.dataProvider);
}

private function atualizar():void {
    NavioForm.atualizar(dg.dataProvider, dg.selectedIndex);
}

こちら側からは完璧に機能しています。

しかし、静的関数を使用したため、以下の例でわかるように、コードは少し反復的になり始めています。

[CRUDフォームのスクリプトタグ(incluir == include, atualizar == update, excluir == delete)]

...

[Bindable] private var navio:Navio;

public static function incluir(dataList:IList):void {
    var form:NavioForm = new NavioForm();
    form.action = FormWindow.ACTION_NEW + Navio.name;

    form.navio = new Navio();
    form.navio.lastUpdate = new Date();

    form.result = function():void {
        PortoService.obj.persistirNavio(form.navio).result(function(navio:Navio):void {
            dataList.addItem(navio);
            form.close();
        }).fault(function(event:FaultEvent):void {
            if(event.fault.faultString == 'duplicate key') {
                Util.showError("This vessel's IMO is already present in our database.");
            } else throw event.fault;
        });
    };

    PopUp.add(form);
}

public static function atualizar(dataList:IList, index:int):void {
    var form:NavioForm = new NavioForm();
    form.action = FormWindow.ACTION_UPDATE + Navio.name;
    form.imoRecieved = true;

    form.navio = dataList[index];

    PortoService.obj.obter(Navio, form.navio.key).result(function(navio:Navio):void {
        form.navio = navio;
        form.navio.lastUpdate = new Date();
    });

    form.result = function():void {
        PortoService.obj.persistir(form.navio).result(function(navio:Navio):void {
            dataList[index] = navio;
            form.close();
        }).fault(function(event:FaultEvent):void {
            if(event.fault.faultString == 'duplicate key') {
                Util.showError("This vessel's IMO is already present in our database.");
            } else throw event.fault;
        });
    };

    PopUp.add(form);
}

...

別の CRUD フォームのスクリプト タグ:

...
[Bindable] private var vesselType:VesselType;

public static function incluir(dataList:IList):void {
    var form:VesselTypeForm = new VesselTypeForm();
    form.action = FormWindow.ACTION_NEW + VesselType.name;

    form.vesselType = new VesselType();

    form.result = function():void {
        CoreService.obj.persistir(form.vesselType).result(function(type:VesselType):void {
            dataList.addItem(type);
            form.close();
        });
    };

    PopUp.add(form);
}

public static function atualizar(dataList:IList, index:int):void {
    var form:VesselTypeForm = new VesselTypeForm();
    form.action = FormWindow.ACTION_UPDATE + VesselType.name;

    form.vesselType = Util.clone(dataList[index]);

    form.result = function():void {
        CoreService.obj.persistir(form.vesselType).result(function(type:VesselType):void {
            dataList[index] = type;
            form.close();
        });
    };
    form.deleteClick = function():void {
        CoreService.obj.excluir(form.vesselType.key).result(function():void {
            dataList.removeItemAt(index);
            form.close();
        });
    };

    PopUp.add(form);
}

では、これを機能させるための設計パターンまたはその他の手法はありますか?

4

1 に答える 1

0

データプロバイダーの場所など、すべての動的な要素を使用してインスタンス化するCrudコンポーネントを作成し、適切なリスナーを割り当てるイベント(またはシグナル)をブロードキャストすることができます。

于 2013-01-09T05:35:34.113 に答える