2011-10-27 27 views
0

在我的Flex應用程序,我的自定義類AudLogDataGrid具有渲染功能採用數據列表和過濾它,將它傳遞給渲染器之前:Flex:如何在加載組件之前檢索數據?

 private function rendererFunction(item:Object, grid:Object):ClassFactory { 
      var itemRenderer:ClassFactory = new ClassFactory(AudActionDropDownIR); 
      var FilteredAudActionData:ArrayCollection = new ArrayCollection(AudActionData.toArray()); 
      ASTDForRow = item.AUD_STEP_TYPE_ID; 
      FilteredAudActionData.filterFunction = filterTheData; 
      FilteredAudActionData.refresh(); 
      (itemRenderer as AudActionDropDownIR).TheData = FilteredAudActionData; 
      return itemRenderer; 
     } 

的AudActionData的IList指將其排序是從遠程檢索在父類,然後被作爲數據綁定通過使用自定義的HTTPService xml文件:

<components:AudLogDataGrid id="AudLogGrid" y="131" left="10" right="10" 
          AudLogGridSelectionChange="AudLogGrid_AudLogGridSelectionChangeHandler(event)" 
          TheData="{getAudLogsResult.lastResult}" 
          AudActionData="{getAudActionsResult.lastResult}"/> 

然而,rendererFunction運行前的數據完全從服務器獲取!沒有任何方法可以避免在AS中聲明AudLogDataGrid?

謝謝!

回答

1

試試這個:

protected var filteredStuff:XMLListcollection = new XMLListCollection; 
protected var cf:ClassFactory = new ClassFactory(AudActionDropDownIR); 
protected function creationComplete():void {//call from creationComplete "property" in MXML 
    cf.properties= {TheData:filteredStuff}; 
    filteredStuff.filterFunction = filterTheData;//suggest you use e4x instead, but I can't give exact syntax without seeing your filterFunction 
} 

//when the data is returned: 
protected function gotTheData(e:ResultEvent):void { 
    filteredStuff.source = e.result.children as XMLList; 
} 

在AudLogGrid MXML,只需設置爲比照的itemRenderer。 XMLListCollection應該處理對引用它的任何事情的改變(現在你的所有渲染器都應該這樣做),這比每次需要渲染器時都要實例化一個新的ClassFactory的內存佔用要少得多。覆蓋生命週期方法,而不需要在AS中編寫整個組件。只需說'

相關問題