2013-05-25 3 views
0

flex로 통계를 작성하고 싶습니다. 나는 자바 서비스에서 내 배열 목록 recuperated 단추를 클릭하고 내가 자바에서 목록의 반환 값을 테스트 할 때 그것이 올바른 결과를 제공하지만 flex에서 datagrid가 아닌 통계의 끝과 날짜를 회복했을 때 채우는.데이터 격자에 값 컬렉션의 자바를 채우기

[Bindable] 
private var FinalResult:ArrayCollection = new ArrayCollection(); 

private function getTicketByStatus(evt:ResultEvent):void 
     { 
      FinalResult= evt.result as ArrayCollection; 
      dg.dataProvider=FinalResult; 
     } 
protected function buttnSta_clickHandler(event:MouseEvent):void 
     { 
      startDate=StartDateField.selectedDate; 
      endDate=EndDateField.selectedDate; 
      CountTicketsByStatusResult.token = ticketServiceImpl.CountTicketsByStatus(startDate,endDate); 
      FinalResult=CountTicketsByStatusResult.lastResult; 
      dg.dataProvider=FinalResult; 
      for(var i=0;i<FinalResult.length;i++) 
      { 
       Alert.show("element"+FinalResult.length.toString()); 
      } 
     } 

<mx:DataGrid id="dg" x="306" y="91" width="354" height="208" dataProvider="{FinalResult}"> 

답변

1

서비스는 호출하고 호출 비동기 :
이 플렉스의 방법이다. 즉, 서비스를 호출 한 직후에 "lastResult"의 결과를 가져올 수 없습니다. 리턴 된 토큰에 응답자를 추가해야합니다.

또한 DataGrid의 FinalResult 배열 콜렉션에 이미 바인딩하고 있으므로 getTicketByStatus 메소드에서 다시 설정할 필요가 없습니다.

언급해야 할 마지막 사항 : 개인 변수에는 관례에 따라 밑줄이 붙고 소문자로 시작됩니다. 따라서 FinalResult는 _finalResult가됩니다.

[Bindable] 
private var _finalResult:ArrayCollection = new ArrayCollection(); 

private function getTicketByStatus(evt:ResultEvent):void 
    { 
     _finalResult = evt.result as ArrayCollection; 
    } 

private function getTicket_faultHandler(evt:FaultEvent):void 
    { 
     // error 
    } 

protected function buttnSta_clickHandler(event:MouseEvent):void 
    { 
     startDate=StartDateField.selectedDate; 
     endDate=EndDateField.selectedDate; 
     var token:AsyncToken = ticketServiceImpl.CountTicketsByStatus(startDate,endDate); 
     token.addResponder(new Responder(getTicketByStatus, getTicket_faultHandler)); 
    } 

+0

전적으로 개인 변수 (예 : getter/setter가없는 것)에 대해 전체 커뮤니티에서 밑줄 규칙을 채택했는지 확신 할 수 없습니다. 어쨌든 플렉스 소스 코드에서 연습되지 않습니다. 만약 당신이'CountTicketsByStatusResult.lastResult'에 직접 바인딩했다면 코드가 작동했을 것입니다 ('CountTicketsByStatusResult'가 Bindable이라고 가정). 데이터가 들어 오면,'lastResult'에 대해 PropertyChangeEvent가 발생되고 바인딩은 그리드의 dataProvider를 업데이트합니다. – RIAstar

+0

대다수는 실제로 그렇지 않습니다. 나는 대부분의 Flex 개발자가 물론 이것을 주관적으로 사용한다고 가정하기 때문에 추가했다. –

+0

나는 그렇지 않습니다. 변수/메소드/클래스 이름의 문자가 아닌 모든 것에 대한 비합리적인 혐오감이 있습니다. 'buttnSta_clickHandler'와 같은 것은'buttn'과'Sta' (왜냐하면 지구상에 'sta'가 무엇인지, 그리고 왜 'button'대신에 'buttn'이라고 써야 하죠?) 때문에' _하지만 여전히 (기록을 위해 : 나는 당신이 그것을 복사했다는 것을 안다.) 내가 아는 직장에 더 이상 신청할 수 없습니까? ; 실용적인 POV에서 : 내 코드에서'_myVar = "someVal"'을 볼 때, 나는 즉시 내가 명시 적으로 피할 수있는 설정자를 알았다. 모든 개인 변수에 밑줄이 있다면 – RIAstar

0

난 내 코드를 테스트하기 위해 경고를 추가했지만 내가보기 bloqued처럼 표시되는 버튼을 클릭하면이 새 코드이며,이 :

코드는 다음과 같이 보일 것이다 표시되는 경고 없음

[Bindable] 
      var startDate:Date; 
      [Bindable] 
      var endDate:Date; 
[Bindable] 
      private var final_result:ArrayCollection; 
public function getTicketByStatus(evt:ResultEvent):void 
      { Alert.show("1"); 
       final_result= evt.result as ArrayCollection; 
       dg.dataProvider=final_result; 
      } 
    protected function button1_clickHandler(event:MouseEvent):void 
      { 
       startDate=StartDateField.selectedDate; 
       endDate=EndDateField.selectedDate; 
       CountTicketsByStatusResult.addEventListener(ResultEvent.RESULT,getTicketByStatus); 
       CountTicketsByStatusResult.addEventListener(FaultEvent.FAULT, onFault_handler); 
       CountTicketsByStatusResult.token = ticketServiceImpl.CountTicketsByStatus(startDate,endDate); 
      } 
      protected function onFault_handler(event:FaultEvent):void { 
       Alert.show("Error in calling service: " + event.message, "Error"); 
      } 
<s:NavigatorContent width="100%" height="100%" label="Tickets By status"> 
      <mx:DateField id="StartDateField" x="112" y="10" width="151"/> 
      <mx:DateField id="EndDateField" x="803" y="7" width="153" /> 
      <s:Label x="17" y="9" width="61" height="22" fontFamily="Georgia" fontWeight="bold" 
        text="From"/> 
      <s:Label x="769" y="17" width="40" height="22" fontFamily="Georgia" fontWeight="bold" 
        text="To"/> 


      <mx:PieChart id="myChart" x="288" y="355" height="212" dataProvider="{final_result}" showDataTips="true"> 
       <mx:series> 
        <mx:PieSeries 
         field="number" 
         nameField="Status" 
         labelPosition="callout"/> 
       </mx:series> 
      </mx:PieChart> 
      <mx:Legend x="41" y="372" width="200" height="188" dataProvider="{final_result}"/> 
      <mx:DataGrid id="dg" x="293" y="153" width="420" height="189" dataProvider="{final_result}"> 
       <mx:columns> 
        <mx:DataGridColumn dataField="status" headerText="Metrics"/> 
        <mx:DataGridColumn dataField="number" headerText="Number" /> 
       </mx:columns> 
      </mx:DataGrid> 
      <s:Button x="434" y="61" width="133" label="Generate Statics" 
         click="button1_clickHandler(event)"/> 


     </s:NavigatorContent>