Flex: рендеринг связанного TileList - когда он заканчивает рендеринг? - PullRequest
1 голос
/ 14 мая 2010

У меня есть mx: TileList, который связан с ArrayCollection. У меня есть некоторый код, который отображает сообщение «Загрузка ...» перед изменением ArracyCollection, а некоторый код после этого скрывает сообщение загрузки.

Для небольших наборов данных все работает нормально. Тем не менее, я заметил, что с размером массива около 50 ~ и более, flex будет скрывать мое загрузочное сообщение до того, как TileList завершит рендеринг новых данных, и у меня останется пустой экран на нечетную секунду.

Есть ли событие, которое я могу прослушать, которое вызывается после завершения рендеринга TileList? Код выглядит примерно так:

loading_message.visible = true;
for each (var x:Object in new_data) {
    tile_list_data.append(x); // bound to my_tile_list component
}
my_tile_list.validateNow();
loading_message.visible = false;

В этом примере load_message появляются, исчезают, а затем приложение flex отстает, прежде чем, наконец, отобразить обновленный TileList.

Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 14 мая 2010

Проблема в том, что он не выполняет .visible = true, запускает цикл для каждого цикла и ждет, пока он не будет выполнен, а затем переходит к .visible = false, но фактически запускает .visible для каждого , .visible.

Если вы хотите удостовериться в том, что каждый из ваших концов заканчивается до продолжения следующей строки кода, вам нужно переместить остальную часть кода в другую функцию, которая будет вызываться каким-либо пользовательским событием ты сделаешь.

Теперь для каждого из вас вам нужно добавить код, который проверяет, выполнено ли это, а затем вызвать диспетчера пользовательских событий.

var n:Number = 0;
for each (var x:Object in new_data) {
    ++n;
    tile_list_data.append(x); // bound to my_tile_list component
    if (new_data.length <= n) { call the event }
}

Так что теперь у вас будет свой для каждого с каким-то настраиваемым диспетчером событий, который вызовет другую функцию, содержащую остальную часть вашего кода, включая .visable = false., Убедившись, что остальная часть вашего кода будет работать только после для каждого конца.

Я знаю, что это некрасиво, но это единственный способ, которым я могу придумать, чтобы убедиться, что это сработает.

...