0


1

Flex 4でViewStackから子コンテンツを削除する

次の例では、[コンテンツの追加]をクリックすると、期待どおりに新しいスタックコンテンツがViewStackにロードされます。 ただし、[コンテンツを閉じる]をクリックすると、ViewStack内で新しく作成されたコンテンツが閉じられ、[defaultContent]コンテンツに切り替わると予想されます。

誰が私が間違っているのか教えてもらえますか? 前もって感謝します。

// TestProject.mxml (application)







            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;
            }









// NewContent.mxml (component)




            import mx.core.FlexGlobals;
            private function closeContent():void
            {
                FlexGlobals.topLevelApplication.viewStack.removeChild('newContent');
                FlexGlobals.topLevelApplication.viewStack.selectedChild = 'defaultContent';
            }

2 Answer


0


`selectedChild`は、ラベルではなく子自身を期待します。

代わりに-これを試してください:

public function removeContent():void
{
     Viewstack(this.parent).selectedIndex = 0;
     this.parent.removeChild(this);
}

注-一般に、FlexFlexs.topLevelApplicationの使用を避けることをお勧めします。これは、非常に密に結合された脆弱なアプリケーションにつながるためです。


0


並べ替えました…​

// 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"));
}