Flash 没有时间线的视图(页面)

Flash 没有时间线的视图(页面),flash,actionscript-3,Flash,Actionscript 3,我有一个相对简单的问题。在不使用时间线的情况下,重新创建多页应用程序的最佳方法是什么。我创建了一个pagemanager类,它添加和删除类,类充当页面。现在这似乎不是一个非常有效的方法。 我相信flex提供了一种与HTML类似的方法,但现在转向flex已经太晚了 有什么建议吗? 提前感谢。我建议您创建一个与Flex中的viewstack类似的类。将其与接口(例如IPage)一起使用,以强制viewstack用于加载和卸载/处置页面的方法。在viewstack上运行changePage方法后,将处

我有一个相对简单的问题。在不使用时间线的情况下,重新创建多页应用程序的最佳方法是什么。我创建了一个pagemanager类,它添加和删除类,类充当页面。现在这似乎不是一个非常有效的方法。 我相信flex提供了一种与HTML类似的方法,但现在转向flex已经太晚了

有什么建议吗?
提前感谢。

我建议您创建一个与Flex中的viewstack类似的类。将其与接口(例如IPage)一起使用,以强制viewstack用于加载和卸载/处置页面的方法。在viewstack上运行changePage方法后,将处理当前页面并打开新页面。运行此功能后,可以很容易地添加过渡

类似于以下内容(此代码未经验证):



IPage.as

package
{
    public interface IPage
    {
        function open() : void

        function close() : void
    }
}

ViewStack.as

package
{
    import flash.display.Sprite;

    public class ViewStack extends Sprite
    {
        public function ViewStack()
        {
            super();
        }

        public function addPage(pageID : String, page : IPage) : void
        {
            // add page to list
        }

        public function removePage(pageID : String) : void
        {
            // remove page from list
        }

        public function changePage(pageID : String) : void
        {
            if(_currentPage)
            {
                _currentPage.close();
                removeChild(_currentPage);
            }

            _currentPage = getPageById(pageID);
            _currentPage.open();
            addChild(_currentPage);
        }

    }
}

看起来确实是最好的解决办法。这方面的主要问题是,删除页面后,这些页面中的所有EventListener仍在运行,我必须手动删除它们。仍然可行,但不是很方便。此外,我不熟悉接口(羞耻),为什么我要将打开和关闭函数放在接口中而不放在viewstack类中,以及它如何在接口中运行?通过使用一个接口,您可以有多个实现同一接口的页面,并强制设置已定义的方法/函数。例如:IntroPage和OutroPage在其打开/关闭方法中具有不同的功能。但只要它们有这些方法,viewstack就可以使用它们,而无需引用实际的类(及其引用)。您还可以通过一个抽象类(AbstractPage)来实现这一点,在这个抽象类中重写mehods。
package
{
    import flash.display.Sprite;

    public class ViewStack extends Sprite
    {
        public function ViewStack()
        {
            super();
        }

        public function addPage(pageID : String, page : IPage) : void
        {
            // add page to list
        }

        public function removePage(pageID : String) : void
        {
            // remove page from list
        }

        public function changePage(pageID : String) : void
        {
            if(_currentPage)
            {
                _currentPage.close();
                removeChild(_currentPage);
            }

            _currentPage = getPageById(pageID);
            _currentPage.open();
            addChild(_currentPage);
        }

    }
}