2013-05-25 2 views
0

Я хотел бы сделать статистику в flex. Я восстановил список массивов из java-сервиса, когда я нажал кнопку, и я восстановил дату окончания и окончания статистики, когда я проверяю возвращаемые значения в списке в java, он дает правильный результат, но в flex datagrid is not заполнены.
Это метод в гибком:заполнение сетки данных массивом значений значений объектов из java

[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» сразу после вызова службы. Вам нужно добавить ответчика к возвращаемому токену.

Кроме того, поскольку вы уже привязываетесь к arraycollection FinalResult на datagrid, вам не нужно устанавливать его снова в методе 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

Я не уверен, что конвенция подчеркивания была принята всем сообществом исключительно для частных переменных (то есть тех, которые не имеют никаких геттеров/сеттеров); в любом случае это не практикуется в исходном коде Flex. @hana Возможно, еще одна вещь, которая должна была бы указать: ваш код работал бы, если бы вы связались непосредственно с 'CountTicketsByStatusResult.lastResult' (при условии, что' CountTicketsByStatusResult' является Связываемым). Когда данные поступают, PropertyChangeEvent запускается для 'lastResult', и привязка обновляет dataProvider сетки. – RIAstar

+0

Большинство, скорее всего, не действительно. Я добавил его с тех пор, как я предполагаю, что большинство разработчиков Flex используют эту практику, хотя она, конечно, субъективна. –

+0

Я этого не делаю. У меня есть иррациональное отвращение ко всему, что не является буквой в имени переменной/метода/класса. Что-то вроде 'buttnSta_clickHandler' просто заставляет меня съеживаться, больше из-за' buttn' и 'Sta' (что же такое« sta »? И почему, черт возьми, кто-нибудь напишет« buttn »вместо« button »?), _', но все же (для записи: я знаю, что вы просто скопировали это). Могу ли я больше не обращаться за работой с вами? ; p Из практического POV: когда я вижу '_myVar =" someVal "в моем коде, я сразу же знаю, что я явно избегал setter, чего я не мог, если бы каждая личная переменная имела знак подчеркивания – 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> 
Смежные вопросы