我们有一个相当大的 Flex 应用程序,我们的 QA 出现了随机但可重现的错误,而 Flex 开发人员无法重现这些错误。 其中一些错误是从 Flash Player 调试版本中引发的,例如:
ReferenceError: Specified ApplicationDomain does not contain the class ::LineSeriesLegendMarker
at org.spicefactory.lib.reflect::ClassInfo$/getClassDefinitionByName()
at org.spicefactory.lib.reflect::ClassInfo$/getClassInfo()
at org.spicefactory.lib.reflect::ClassInfo$/forInstance()
at org.spicefactory.parsley.core.view.impl::DefaultViewConfigurator/getDefinitionByType()
at org.spicefactory.parsley.core.view.impl::DefaultViewConfigurator/getDefinition()
at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/processAutowireEvent()
at org.spicefactory.parsley.core.view.util::ContextAwareEventHandler/handleEvent()
at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/handleAutowireEvent()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/prefilterView()
at flash.display::DisplayObjectContainer/addChildAt()
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::$addChildAt()
at mx.core::Container/addChildAt()
at mx.core::Container/addChild()
at mx.charts::Legend/addLegendItem()
at mx.charts::Legend/populateFromArray()
at mx.charts::Legend/commitProperties()
at mx.core::UIComponent/validateProperties()
at mx.managers::LayoutManager/validateProperties()
at mx.managers::LayoutManager/doPhasedInstantiation()
at mx.managers::LayoutManager/doPhasedInstantiationCallback()
其他错误包括组合框未正确填充以及似乎只是一般计时问题。
我想强调的是,我们已将范围缩小到我们的主 SWF,除了 mxmlc 参数 -debug=true 与 -debug=false 之外,没有其他变量。 有其他人遇到过这种情况或者知道为什么构建会导致不同的行为吗?
你将不得不展示更多的代码;主要是你的欧芹配置。
debug=true 和 debug=false 之间的区别在于 debug=true 不会在最终产品中跟踪错误。您的开发人员应该始终以 debug=true 运行并安装 Flash Player Debug。
另外,我很好奇为什么 Parsley 需要了解视图组件。 您使用配置标签吗? 我建议您不要使用它,而是将 FastInject 与适当的演示者模型一起使用,这更有利于可测试性。 配置意味着 Parsley 必须反映您视图中的所有属性,这是无用且耗时的。 我保证如果您使用 FastInject 而不是配置,您的问题就会消失。 除非您尝试将视图注入组件,但您不应该这样做。 如果是这种情况,您需要以更好的方式构建您的应用程序。