我有一个viewstack,其中包含3个(此时只有1个)自定义组件:
<s:Application xmlns:components="components.*">
<mx:ViewStack id="mainViewStack" x="76" y="90" width="800" height="400">
<components:Login />
</mx:ViewStack>
</s:Application>
(为了便于阅读,删除了一些代码) 这样做是正确的,组件内的所有内容都可以正常工作
在此函数中(在自定义组件内),如果满足条件(发生这种情况),他应该更改视图堆栈的selectedIndex:
protected function checkUsernameExistsDbSucces(event:ResultEvent):void
{
if(Boolean(event.result) != 0)
{
this.parentApplication.mainViewStack.selectedIndex = 1;
}
else
{
some code
}
}
答案 0 :(得分:1)
您可以使用“parent”属性返回视图堆栈。这是一些示例代码。为简单起见,我没有编写代码和示例自定义组件,但是父引用仍然可以在您的自定义组件内部处理,而处理程序将处于您的情况。
<mx:Script>
<![CDATA[
protected function back_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
ViewStack(btnBack.parent.parent).selectedIndex = 0;
}
protected function forward_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
ViewStack(btnForward.parent.parent).selectedIndex = 1;
}
]]>
</mx:Script>
<mx:ViewStack id="viewstack1" x="476" y="97" width="200" height="200">
<mx:Canvas width="100%" height="100%" label="View 1">
<mx:Button x="125" y="168" id="btnForward" label="forward" click="forward_clickHandler(event)"/>
</mx:Canvas>
<mx:Canvas width="100%" height="100%" label="back">
<mx:Button x="137" y="168" id="btnBack" label="back" click="back_clickHandler(event)"/>
</mx:Canvas>
</mx:ViewStack>
但我不建议这样做,因为您试图影响位于自定义组件之外的组件。此解决方案将要求始终定位您的自定义组件,以便第二个父对象始终是ViewStack。当然,如果您可以找到一个视图堆栈作为第二个父级,您可以验证并仅执行操作,但我们肯定会打破“自定义组件”的想法,因为您可以随时随地使用该组件,无论外面发生了什么组件。
所以我建议使用事件触发视图堆栈中的更改。因此,在组件内部,您将创建自定义事件。并在条件满足时扔掉它。然后,您可以侦听该事件并更改视图堆栈的selectedIndex。
这是Adobe关于创建自定义事件的文档: