首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除嵌套视图时RobotLegs中的错误

删除嵌套视图时RobotLegs中的错误
EN

Stack Overflow用户
提问于 2013-08-09 15:25:52
回答 1查看 184关注 0票数 0

我们可能有一个稍微不寻常的设置,其中上下文父-子关系与显示列表无关。每个视图都加载到一个ViewLoader中,它使用以下扩展设置视图的上下文:

代码语言:javascript
复制
    public function extend(context:IContext):void
    {
        context.install( 
            TraceLoggingExtension,
            VigilanceExtension,
            InjectableLoggerExtension,
            ContextViewExtension,
            EventDispatcherExtension,
            DirectCommandMapExtension,
            EventCommandMapExtension,
            LocalEventMapExtension,
            ViewManagerExtension,
            StageObserverExtension,
            MediatorMapExtension,
            ViewProcessorMapExtension,
            StageCrawlerExtension,
            StageSyncExtension
        ).install( new ModularityExtension(false, true) );

        context.configure( ContextViewListenerConfig );

        var viewProcessor:IViewProcessorMap = context.injector.getInstance( IViewProcessorMap );
        viewProcessor.map( IViewLoader ).toProcess( new MediatorCreator( ViewLoaderMediator ));

    }

一切都很好。然而,当两个视图被嵌套,并且父视图被从阶段中移除时,我在viewProcessor中得到了子视图上下文中的以下错误:

代码语言:javascript
复制
TypeError: Error #1006: value is not a function.
    at robotlegs.bender.extensions.viewProcessorMap.impl::ViewProcessorFactory/runAllUnprocessors()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/extensions/viewProcessorMap/impl/ViewProcessorFactory.as:92]
    at robotlegs.bender.extensions.viewProcessorMap::ViewProcessorMapExtension/beforeDestroying()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/extensions/viewProcessorMap/ViewProcessorMapExtension.as:72]
    at MessageRunner/next()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/MessageDispatcher.as:152]
    at MessageRunner/run()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/MessageDispatcher.as:135]
    at robotlegs.bender.framework.impl::MessageDispatcher/dispatchMessage()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/MessageDispatcher.as:87]
    at robotlegs.bender.framework.impl::LifecycleTransition/enter()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/LifecycleTransition.as:191]
    at robotlegs.bender.framework.impl::Lifecycle/destroy()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/Lifecycle.as:173]
    at robotlegs.bender.framework.impl::Context/destroy()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/framework/impl/Context.as:183]
    at robotlegs.bender.extensions.contextView::StageSyncExtension/onRemovedFromStage()[/Development/Projects/Robotlegs/robotlegs-framework/src/robotlegs/bender/extensions/contextView/StageSyncExtension.as:92]
    at flash.display::DisplayObjectContainer/removeChild()
    at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::$removeChild()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/core/UIComponent.as:7312]
    at mx.core::UIComponent/removeChild()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/core/UIComponent.as:7219]
    at spark.components::Group/http://www.adobe.com/2006/flex/mx/internal::elementRemoved()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/spark/src/spark/components/Group.as:1732]
    at spark.components::Group/removeElementAt()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/spark/src/spark/components/Group.as:1479]
    at spark.components::Group/removeAllElements()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/spark/src/spark/components/Group.as:1498]
    at ViewLoader/applyViewImpl()
    at ViewLoader/commitProperties()
    at mx.core::UIComponent/validateProperties()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/core/UIComponent.as:8227]
    at mx.managers::LayoutManager/validateProperties()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:605]
    at mx.managers::LayoutManager/doPhasedInstantiation()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:821]
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()[/Users/justinmclean/Documents/ApacheFlexSDK/frameworks/projects/framework/src/mx/managers/LayoutManager.as:1188]

我试过强迫孩子在父母之前被移除,但这并不能防止错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-29 13:32:39

该问题是由映射到每个ViewLoader的多个中介程序引起的。当视图加载器嵌套两次时,两个祖先上下文都会添加映射。使用MediatorCreator everywhere的同一个实例是一个简单的修复方法,它可以自己管理这个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18150275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档