Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 从Flex 4的ViewStack中删除子内容_Apache Flex_Actionscript 3_Actionscript_Flex4_Mxml - Fatal编程技术网

Apache flex 从Flex 4的ViewStack中删除子内容

Apache flex 从Flex 4的ViewStack中删除子内容,apache-flex,actionscript-3,actionscript,flex4,mxml,Apache Flex,Actionscript 3,Actionscript,Flex4,Mxml,在下面的示例中,当我单击“添加内容”时,新的堆栈内容将按预期加载到ViewStack中。但当我单击“Close Content”时,我希望它关闭ViewStack中新创建的内容并切换到“defaultContent”内容 谁能告诉我哪里出了问题吗?提前谢谢 // TestProject.mxml (application) <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http:/

在下面的示例中,当我单击“添加内容”时,新的堆栈内容将按预期加载到ViewStack中。但当我单击“Close Content”时,我希望它关闭ViewStack中新创建的内容并切换到“defaultContent”内容

谁能告诉我哪里出了问题吗?提前谢谢

// TestProject.mxml (application)
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 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:layout>
        <s:VerticalLayout/>
    </s:layout>
    <fx:Script>
        <![CDATA[
            import com.NewContent;

            private function addContent():void
            {
                var content:NewContent = new NewContent();
                var navContent:NavigatorContent = new NavigatorContent();
                navContent.id = 'newContent';
                navContent.label = 'newContent';
                navContent.width = Number('100%');
                navContent.height = Number('100%');
                navContent.addElement(content);

                viewStack.addElement(navContent);
                viewStack.selectedChild = navContent;
            }
        ]]>
    </fx:Script>
    <mx:ViewStack id="viewStack" width="100%" height="100%">
        <s:NavigatorContent id="defaultContent"
                            label="defaultContent">
            <s:Button click="addContent()" label="Add Content"/>
        </s:NavigatorContent>
    </mx:ViewStack>
</s:WindowedApplication>

// NewContent.mxml (component)
<?xml version="1.0" encoding="utf-8"?>
<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"
         width="100%" height="100%">
    <fx:Script>
        <![CDATA[
            import mx.core.FlexGlobals;
            private function closeContent():void
            {
                FlexGlobals.topLevelApplication.viewStack.removeChild('newContent');
                FlexGlobals.topLevelApplication.viewStack.selectedChild = 'defaultContent';
            }
        ]]>
    </fx:Script>
    <s:Button click="closeContent()" label="Close Content"/>
</s:Group>
//TestProject.mxml(应用程序)
//NewContent.mxml(组件)

selectedChild
期望的是子对象本身,而不是标签

相反,请尝试以下方法:

public function removeContent():void
{
     Viewstack(this.parent).selectedIndex = 0;
     this.parent.removeChild(this);
}
注意-通常建议避免使用FlexGlobals.topLevelApplication,因为它会导致一个非常紧密耦合且脆弱的应用程序。

// TestProject.mxml (application)
private function addContent():void
{
    var content:NewContent = new NewContent();
    content.addEventListener("removeMe",onRemove,false,0,true);
    var navContent:NavigatorContent = new NavigatorContent();
    navContent.id = 'newContent';
    navContent.label = 'newContent';
    navContent.width = Number('100%');
    navContent.height = Number('100%');
    navContent.addElement(content);

    viewStack.addElement(navContent);
    viewStack.selectedChild = navContent;

private function onRemove(event:Event):void
{
    var content:NewContent = event.currentTarget as NewContent;
    content.removeEventListener("removeMe",onRemove,false);
    viewStack.removeChild(content.parent.parent.parent);
}

// NewContent.mxml (component)
public function removeContent():void
{
    dispatchEvent(new Event("removeMe"));
}

谢谢,但是我现在收到以下错误:“TypeError:error#1034:类型强制失败:无法转换spark.components::Group@8614c29到mx.containers.ViewStack”。有什么想法吗?