Flex的新州重新加入了标有includeIn / excludeFrom的视觉项目。如果我有一个Group(MainGroup),其中包含5个受状态控制的子元素/元素,是否还有办法获取对MainGroup子元素的引用? mainGroup.numChildren和mainGroup.numElements不起作用,因为子项是重新父级的。充其量,他们显示1。
<s:states>
<s:State name="view1State" />
<s:State name="view2State" />
<s:State name="view3State" />
<s:State name="view4State" />
</s:states>
<s:Group id="mainGroup">
<shipping:OrderShipping id="view1"
includeIn="view1State" />
<payment:OrderPayment id="view2"
includeIn="view2State" />
<verification:OrderVerification id="view3"
includeIn="view3State" />
<confirmation:OrderConfirmation id="view4"
includeIn="view4State" />
</s:Group>
答案 0 :(得分:2)
如果你想要状态来控制visible / includeinlayout而不是父母身份,那就这样做吧
<s:states>
<s:State name="view1State" />
<s:State name="view2State" />
<s:State name="view3State" />
<s:State name="view4State" />
</s:states>
<s:Group id="mainGroup">
<shipping:OrderShipping id="view1"
visible="false"
includeInLayout="false"
visible.view1State="true"
includeInLayout.view1State="true"/>
<payment:OrderPayment id="view2"
visible="false"
includeInLayout="false"
visible.view2State="true"
includeInLayout.view2State="true"/>
<verification:OrderVerification id="view3"
visible="false"
includeInLayout="false"
visible.view3State="true"
includeInLayout.view3State="true" />
<confirmation:OrderConfirmation id="view4"
visible="false"
includeInLayout="false"
visible.view4State="true"
includeInLayout.view4State="true"/>
</s:Group>
答案 1 :(得分:2)
我的一个应用程序中有类似的情况,这就是我完成任务的方式。我觉得有必要这样说,虽然这有效,但我觉得它有点笨拙。考虑到这一点:
cheating
。将此状态设为默认状态(将其放在states
数组中。<shipping:OrderShipping id="view1" includeIn="cheating,view1State" />
Array
的<{1}}类型的新类成员。views
事件处理程序。在处理程序populdate creationComplete
中引用每个视图。例如,views
views = [view1, view2, view3, view4];
)状态:cheating
毕竟,setCurrentState("view1State");
数组将引用每个视图,无论您的应用程序当前处于哪种状态。
答案 2 :(得分:1)
我不确定基础状态实现是否删除/添加子组件或更改其可见性。
如果是前者,我会尝试这样的事情:
for (var x : int = 0; x<mainGroup.numChildren ; x++){
var child : UIComponent = mainGroup.getChildAt(x);
if(child.parent){
// The child has a parent, so it must be displayed; do your processing
} else {
// really this should never occur
}
}
如果是可见性问题,请执行以下操作:
for (var x : int = 0; x<mainGroup.numChildren ; x++){
var child : UIComponent = mainGroup.getChildAt(x);
if(child.visible){
// The child is displayed; do your processing
} else {
// child isn't displayed
}
}
我猜第一种方法是正确的。
[注意我在浏览器中写了这段代码]
答案 3 :(得分:1)
我得到了最好的答案!好吧,我会让你决定。只需操作状态数组......
for each (var viewState:State in mainDocument.states)
{
var overrides:Array = viewState.overrides;
for (var i:int = 0; i < overrides.length; i++)
{
var addItems:AddItems = overrides[i];
if (addItems.destination === mainDocument.mainGroup)
trace((addItems.items as UIComponent).name);
}
}