Progression on Flex でdynamicなparameterを持ったScene その2

昨日のコードだと、/root/some/foobarから/root/some/hogepiyoにGotoできないなー、と昨日布団に入ったときに気付いたので修正。

package jp.archilogic {
    import jp.progression.events.SceneEvent;
    import jp.progression.scenes.SceneObject;

    public class DynamicScene extends SceneObject {
        public function DynamicScene( name : String = null , initObject : Object = null ) {
            super( name , initObject );
        }

        protected var param : String;

        private var child : Scene;

        override protected function _onLoad() : void {
            addPseudoScene();
            load();
        }

        override protected function _onUnload() : void {
            removePseudoScene();
            unload();
        }

        protected function childLoad() : void {
        }

        protected function childUnload() : void {
        }

        protected function load() : void {
        }

        protected function unload() : void {
        }

        private function addPseudoScene( additionalLoadHandler : Function = null ) : void {
            var paths : Array = progression.destinedSceneId.path.split( '/' );
            param = paths[ paths.length - 1 ];
            child = new Scene( param );
            child.addEventListener( SceneEvent.LOAD , childLoadHandler );
            child.addEventListener( SceneEvent.UNLOAD , childUnloadHandler );

            if ( additionalLoadHandler != null ) {
                child.addEventListener( SceneEvent.LOAD , additionalLoadHandler );
            }

            addScene( child );
        }

        private function childLoadHandler( event : SceneEvent ) : void {
            childLoad();
        }

        private function childUnloadHandler( event : SceneEvent ) : void {
            childUnload();

            if ( sceneId.contains( progression.destinedSceneId ) ) {
                child.removeEventListener( event.type , arguments.callee );
                var prev : Scene = child;
                addPseudoScene( function( event_ : SceneEvent ) : void {
                        removeScene( prev );
                    } );
            }
        }

        private function removePseudoScene() : void {
            child.removeEventListener( SceneEvent.UNLOAD , childUnloadHandler );
            removeScene( child );
        }
    }
}

SceneIdのcontainsは普通逆だと思うやろーがー。
childUnloadHandlerのifの中で、シンプルにremovePseudo,addPseudoするとSceneManagerにnullだぞーと怒られる。現在のシーンは新しいシーンに遷移した後でないとremoveしてはいけないっぽいのでこのコード。
実際のパラメータの処理は、childLoad,childUnloadでするように変更