Flex: Как я могу получить данные перед загрузкой компонентов? - PullRequest
0 голосов
/ 27 октября 2011

В моем приложении Flex мой пользовательский класс AudLogDataGrid имеет функцию рендеринга, которая берет список данных и фильтрует его перед передачей в рендерер:

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

Извлекается отсортированный IList AudActionData IListиз удаленного XML-файла с использованием настраиваемого HTTPService в родительском классе, который затем передается как привязка данных:

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

Однако функция rendererFunction запускается до полного извлечения данных с сервера!Есть ли способ обойти это без объявления AudLogDataGrid в AS?

Спасибо!

1 Ответ

1 голос
/ 27 октября 2011

Попробуйте это:

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 просто установите cf в качестве itemRenderer. XMLListCollection должен обрабатывать распространяющиеся изменения во всем, что имеет на него ссылку (что теперь должны делать все ваши средства визуализации. Это гораздо меньше затрат памяти, чем создание нового ClassFactory каждый раз, когда требуется средство визуализации.

Кстати, вы можете переопределить методы жизненного цикла, не записывая весь компонент в AS. Просто говорю.

...