2013-01-08 60 views
0

所以我得到了這個基於TitleWindow的Flex應用程序,這些窗口被寫入它們的靜態函數調用。 這是它的外觀時,就可以創建或從DataGrid中編輯的實體需求,如:我的模式是錯的,我該如何讓它幹?

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

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

這是一個從這邊可以正常使用。

但因爲我使用的靜態函數,代碼開始變得有點重複,因爲我們可以在下面的例子中看到:

[腳本一個CRUD形式的標籤(incluir ==包括|刷新==更新,excluir ==刪除)的另一種形式的CRUD

... 

[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); 
} 

... 

腳本標籤:

... 
[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); 
} 

那麼,有沒有一種設計模式或任何其他技術,使這項工作?

+0

表單是靜態的嗎? – ethrbunny

+0

不,不是。這是我的第一個錯誤,我認爲這將是一個好主意。 – GxFlint

+2

看起來像你可以有一個'形式'基類與'incluir'等功能。然後有從那裏建立的子類。 – ethrbunny

回答

0

您可以創建一個crud組件,並使用所有動態內容(如數據提供者位置)進行實例化,並廣播您分配適當偵聽器的事件(或信號)。

相關問題