Flex中的Strange Accordion组件行为

时间:2011-11-24 11:51:14

标签: flex accordion

我的Flex应用程序中有一个Accordion组件,效果很好,但我发现它的行为有点小故障。

当其中一个菜单打开时,它会显示一个白色矩形,当它完全加载时,它会显示内容。 但是我想在加载时没有这个“白色”矩形显示整个内容。

例如:

图片1 :我的手风琴已准备好使用

Accordion ready

图片2 :我想打开另一个子菜单,所以当它打开时,会显示一个白色矩形(我很快就会截取屏幕截图)

White rectangle

图片3 :最近打开的子菜单已满载

Submenu loaded

用几句话来解释真的很难,但我认为有人理解我。你能帮助我吗?谢谢!

修改

这是我的源代码:

<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 个答案:

答案 0 :(得分:1)

您所描述的内容是由flex中的优化引起的。

查看有关此主题的livedocs

显示白色屏幕是因为您尝试在其他选项卡中显示的组件正处于渲染过程中,并且此渲染需要的时间太长。 这就是你遇到这种打嗝的原因。

虽然不建议将creationPolicy设置为all,但这可能会解决您的问题。

请记住,您实际上不应该将creationPolicy设置为all,而是寻找其他解决方案,例如预加载资产,对象池,...

修改

为什么您的网格组件处于额外的表单容器中? 我相信这就是为什么设置creationPolicy对你的例子不起作用的原因。

提高性能的一种方法是最小化嵌套级别,有效地尝试删除额外的过时表单容器。

其次,使用时,每次都会自动计算物品的位置,渲染时间会稍长。元素的绝对定位很可能是一种优化。

第三,尝试使用某种资产加载策略在运行时在某种缓存中将png图像加载到应用程序中。 然后,您的对象将存储在内存中,访问速度应该更快。

答案 1 :(得分:-1)

这是因为Flex不会在加载时创建手风琴的所有子节点。它可以创建它们 on demand ,可以这么说。因此,在你第一次看到你的第二个菜单之前,还没有准备好,所以它要求你在化妆时坐下来看到那个白色的屏幕,即使它并不意味着你看到它:)

丹尼斯无论如何已经解释了所有这一切,所以我再没有这么做了:P