递归Flex视图组件

时间:2011-09-15 16:17:07

标签: flex actionscript-3 flex4

我有一个Flex组件,它是一个数据对象的视图,递归地具有对自身的引用。

例如,如果你有一个引用Person类型的boss字段的Employee类,我想为该Boss嵌套相同的视图。这不应该是一个无限的递归关系(例如,我只是查看每个对象的boss字段)。

我已经尝试创建一个引用自身的MXML组件,但是当我运行它时它会锁定(似乎它会进入一个递归循环)。

你可以做些什么像includeInLayout条件那样确保它甚至不实例化那个组件。

3 个答案:

答案 0 :(得分:1)

另一个解决方案是拥有两个状态,如“normal”和“boss”,并为嵌套组件设置includeIn =“normal”。默认情况下,itemCreationPolicy将设置为“deferred”,但您仍可以确定它。最后,您可以直接在MXML声明中将currentState属性设置为“boss”。

这样,只有在当前组件状态正常时才会创建嵌套组件。

请注意,如果您已经有一些状态,则必须复制这些状态并将“AndBoss”后缀添加到副本并创建2个状态组,“normalGroup”和“bossGroup”并将includeIn =“normalGroup”分配给你的组件。

<!--MyComponent-->
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" >
    <s:states>
        <s:State name="normal"/>
        <s:State name="boss"/>
    </s:states>
    <component:MyComponent includeIn="normal" 
                           currentState="boss" 
                           itemCreationPolicy="diferred"/>
</s:Group>

答案 1 :(得分:0)

发布一些代码会很有帮助。在我的头脑中,我只有一个默认为false的属性叫做“isChild”。仅当isChild = false时,onCreationComplete组件才会将自身添加到自身。它确保在添加时设置isChild = true。现在当在孩子身上发生creationComplete时,它不会创建另一个级别。

答案 2 :(得分:0)

我发现MXML组件不喜欢将自己的Class作为孩子,但我的经验是AS没有这个限制。