我有一个Flex组件,它是一个数据对象的视图,递归地具有对自身的引用。
例如,如果你有一个引用Person类型的boss字段的Employee类,我想为该Boss嵌套相同的视图。这不应该是一个无限的递归关系(例如,我只是查看每个对象的boss字段)。
我已经尝试创建一个引用自身的MXML组件,但是当我运行它时它会锁定(似乎它会进入一个递归循环)。
你可以做些什么像includeInLayout条件那样确保它甚至不实例化那个组件。
答案 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没有这个限制。