Поведение странного аккордеонного компонента во Flex - PullRequest
1 голос
/ 24 ноября 2011

У меня есть компонент Accordion в моем приложении Flex, и он прекрасно работает, но я обнаружил небольшую ошибку в его поведении.

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

Например:

Изображение 1 : Мой Аккордеон готов к использованию

Accordion ready

Изображение 2 : я хочу открыть другое подменю, поэтому, пока оно открывается, отображается белый прямоугольник (я действительно быстро сделал снимок экрана)

White rectangle

Изображение 3 : недавно открытое подменю полностью загружено

Submenu loaded

Это действительно сложно объяснить несколькими словами, но я думаю, что кто-то меня понял. Вы можете мне помочь? Спасибо!

EDIT

Вот мой исходный код:

<mx:Accordion id="accordion" width="100%" height="90%" verticalGap="0" horizontalGap="0" creationPolicy="all">
    <mx:Form id="menu1" label="Vehículos" width="100%" height="100%">
        <mx:Grid>
            <mx:GridRow>
                <mx:GridItem>
                    <mx:Image source="./assets/cars/car1.png"/>
                </mx:GridItem>
                <mx:GridItem>
                    <mx:Image source="./assets/cars/car2.png"/>
                </mx:GridItem>
            </mx:GridRow>
            <mx:GridRow>
                <mx:GridItem>
                    <mx:Image source="./assets/cars/car3.png"/>
                </mx:GridItem>
                <mx:GridItem>
                    <mx:Image source="./assets/cars/car4.png"/>
                </mx:GridItem>
            </mx:GridRow>
        </mx:Grid>
    </mx:Form>
    <mx:Form id="menu2" label="Señales" width="100%" height="100%">
        <mx:Grid >
            <mx:GridRow>
                <mx:GridItem>
                    <mx:Image source="./assets/signals/X01A20.png"/>
                </mx:GridItem>
                <mx:GridItem>
                    <mx:Image source="./assets/signals/X01A21.png"/>
                </mx:GridItem>
            </mx:GridRow>
            <mx:GridRow>
                <mx:GridItem>
                    <mx:Image source="./assets/signals/X01B10.png"/>
                </mx:GridItem>
                <mx:GridItem>
                    <mx:Image source="./assets/signals/X02A01.png"/>
                </mx:GridItem>
            </mx:GridRow>
            <mx:GridRow>
                <mx:GridItem>
                    <mx:Image source="./assets/signals/X01A01.png"/>
                </mx:GridItem>
            </mx:GridRow>
        </mx:Grid>
    </mx:Form>
</mx:Accordion>

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

То, что вы описываете, вызвано оптимизацией в flex.

Проверьте aliveocs по этой теме

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

Хотя не рекомендуется устанавливать creationPolicy на all, это, вероятно, решит вашу проблему.

Имейте в виду, что вы должны на самом деленикогда не устанавливайте creationPolicy для всех, но ищите другие решения, такие как предварительная загрузка ваших активов, объединение объектов, ..

EDIT

Почему ваши компоненты сетки находятся в дополнительной формеконтейнер?Я полагаю, что это причина, почему установка creationPolicy для всех не работает для вашего примера.

Один из способов повышения производительности - свести к минимуму уровни вложенности, эффективно пытаясь удалить лишние устаревшие контейнеры форм.

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

В-третьих, попробуйте загрузить изображения png в ваше приложение в какой-то кэш-памяти во время выполнения, используя какую-то стратегию загрузки ресурсов.Ваши объекты будут сохранены в памяти, и доступ к ним будет намного быстрее.

0 голосов
/ 24 ноября 2011

Это потому, что Flex не создает всех дочерних элементов аккордеона под нагрузкой.Он создает их по требованию , так сказать.Поэтому, прежде чем вы впервые посмотрели ваше второе меню, оно не было готово, поэтому оно попросило вас сесть, пока оно наносит макияж, и вы увидели этот белый экран, даже если для вас это не означало видетьэто:)

Денис объяснил все, что есть, так что нет смысла делать это снова: P

...