2013-01-08 3 views
0

그래서이 TitleWindow 기반 플렉스 응용 프로그램은이 창에 정적 함수로 작성된이 창을 호출합니다. 이이 기업의 요구를 작성하거나 데이터 그리드에서 편집 할 때와 같은 모습입니다 :내 패턴이 잘못되었습니다. 어떻게 건조하게합니까?

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

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

그것은이 측면에서 완벽하게 작동합니다.

하지만 정적 기능을 사용하기 때문에 우리는 아래의 예에서 볼 수 있듯이, 코드는, 약간 반복지기 시작한다 :

[스크립트 a를 CRUD 형태의 태그 (incluir == 포함, atualizar == 업데이트 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'등의 'form'기본 클래스를 가질 수있는 것 같습니다. 그런 다음 거기에서 빌드하는 하위 클래스가 있습니다. – ethrbunny

답변

0

데이터 공급자 위치와 같은 모든 동적 요소로 인스턴스화하는 crud 구성 요소를 만들 수 있으며 적절한 수신기를 할당 한 이벤트 (또는 신호)를 브로드 캐스트합니다.

관련 문제