Apache flex 递归Flex视图组件

Apache flex 递归Flex视图组件,apache-flex,actionscript-3,flex4,Apache Flex,Actionscript 3,Flex4,我有一个Flex组件,它是一个递归地引用自身的数据对象视图 例如,如果有一个引用Person类型的boss字段的Employee类,我希望为该boss嵌套相同的视图。这不应该是无限递归关系(例如,我只查看每个对象的boss字段) 我曾尝试创建一个引用自身的MXML组件,但当我运行它时,它会被锁定(似乎它进入了一个递归循环) 您是否可以执行任何操作,例如includeInLayout条件,以确保它甚至不会实例化该组件。发布一些代码会很有帮助。在我的脑海中,我只会有一个默认为false的属性,名为“

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

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

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


您是否可以执行任何操作,例如includeInLayout条件,以确保它甚至不会实例化该组件。

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

我发现MXML组件不喜欢将自己的类作为子级,但我的经验是as没有这种限制。

另一种解决方案是有两种状态,如“正常”和“boss”以及set includeIn=“正常”用于嵌套组件。默认情况下,itemCreationPolicy将设置为“deferred”,但您可以通过任何方式定义它以确保安全。最后,您可以在MXML声明中直接将currentState属性设置为“boss”

<!--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>
这样,只有当当前组件状态为正常时,才会创建嵌套组件

请注意,如果您已经有一些状态,则必须复制这些状态,并在副本中添加“AndBoss”后缀,创建两个状态组,“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>