Я написал функцию, которая рекурсивно называется. Я сохранил массив, в котором значения выталкиваются при прослушивании события. Но проблема в том, что функция возвращается сначала без приращения массива, а слушатель выполняется позже.Рекурсивная функция с прослушивателем событий в flex 4
public function getAllChilds(seltem:XML, allChilds:Array): Array
{
if(//the childs of selected item if need to retrive from server)
var viewChildrenJobsService : HTTPService = new HTTPService();
viewChildrenJobsService.url = // here is my url ;
viewChildrenJobsService .addEventListener(ResultEvent.RESULT, function(event:ResultEvent):void {
// now on this result event i got all childs of selected item.
for each(var childJob :XML in seltem.children())
{
allChilds.push(childJob);
if (//the childs of childJob need to retrive from server)
allChilds = getAllHierarchicalChilds(childJob, allChilds);
}
});
return allChilds;
}
Есть ли способ преодолеть эту проблему, чтобы функция вернулась после завершения события?
есть. Теперь я разделил функцию, но все же я столкнулся с той же проблемой. Функция сначала возвращает allChilds (как null) до добавления элементов. Я отлаживал его, но обнаружил, что событие поймано позже. – shekhar681
Конечно, событие будет обработано позже. Вы не можете этого сделать. Я не знаю, чего вы пытаетесь достичь, но я предлагаю вам ознакомиться с [поставщиками данных] (http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7fb8.html) и [Использование HTTPService с xml] (http://help.adobe.com/en_US/Flex/4.0/AccessingData/WS2db454920e96a9e51e63e3d11c0bf69084-7fdd.html#WS2db454920e96a9e51e63e3d11c0bf69084-7b7a). Или, если вы будете более конкретными, возможно, мы сможем вам помочь. – Art
разделение функции только не работает: в обработчике результата вы должны вызвать вторую функцию после установки allchilds. PLS повторяет вопрос –