从子自定义组件更改viewstack中的selectedindex

时间:2011-12-08 13:11:13

标签: actionscript-3 flex actionscript

我有一个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
    }
}

1 个答案:

答案 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关于创建自定义事件的文档:

Dispatching custom events