`
michaeltangbin
  • 浏览: 271761 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江省
社区版块
存档分类
最新评论

为什么Module里包含TabNavigator时,卸载再加­载时出现错误?

阅读更多

为什么Module里包含TabNavigator时,卸载再加­载时出现错误?

这属于Module的共享代码问题(shared code),
当Module中使用managers时(如PopUpManager,DragManager,  HistoryManager)容易出现这个问题,
manager的方法都是静态方法,整个应用程序中创建了一个该manager接口的singleton,
但module仅在自己的Application domain中使用该singleton, 当多个module使用同一个singleton且main
application没有使用时,就会出现这个空对象引用问题:首先引入某manager的module不能将该manager接口的singleton跟其 他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个module就无法引用到该mana ger接口的实例,就出现了空对象引用问题,可以参考Flex的源码。
默认情况下,Accordion和TabNavigator的 historyManagementEnabled =
true;而ViewStack的historyManagementEnabled = false;
所以使用TabNavigator和Accordion时要注意HistoryManager的共享代码问题。另,仅一个module使用HistoryMan ager时,卸载之后又加载该module也会出现该问题,说明第二次加载时相当于一个新的module了。
一个解决办法:
在main application 中引入相关manager,可以通过在main application中申明manager的引用即可,如:
import mx.managers.HistoryManager;
var historyManager:HistoryManager;
其他manager类似。
还可以将共享代码作为module加载到main applicaiton的application domain,具体讲解可以参考Alex
Harui的ppt:
http://blogs.adobe.com/aharui/presentations/ 下面关于module的presentation, 讲得很详细。
On 5/7/07, Wander <dnv...@gmail.com> wrote:
> 同样遇到过此问题,关注一下  (我们的解决办法是....换控件)
> 2007/5/7, 徐灿 <xucan.m...@gmail.com>:
> > 当Module第二次被加载时出现
> > TypeError: Error #1009: 无法访问空对象引用的属性或方法。
> >        at mx.managers::HistoryManager$/register ()
> >        at mx.containers::ViewStack/::addedHandler()
> >        at flash.display:[img]editor/images/smilies/default/13.gif[/img]> > 照字面上意思是很HistoryManager有关,但是我把HistoryManager关了也没有作用= = 请高手帮帮我啊~
> > 下面我做了一个示例.
> > //-----------------主文件-----------
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml ">
> >        <mx:HDividedBox  width="100%" height="100%">
> >          <mxanel width="15%" height="100%" title="导航" id="ngPanel">
> >            <mxree id="adminTree" width="100%" height="100%"
> > verticalScrollPolicy="auto"
> >                      change="onTreeChange(event)"
> >                      dataProvider="{treeDp}"
> > creati
> >                      labelField="@label"/>
> >          </mxanel>
> >          <mxanel id="treeContent" width="85%" height="100%">
> >                        <mx:ModuleLoader id="UILoader"
> >                                            width="100%" height="100%"
> >                                            verticalScrollPolicy="auto"
> > horiz
> >                                    verticalAlign="middle"
> >                                    horiz
> >                                    />
> >          </mxanel>
> >        </mx:HDividedBox>
> >        <mx:Script>
> >                <![CDATA[
> >                        import mx.events.ModuleEvent;
> >                        var treeDpML=<node label="信息管理" >
> >                                                            <node
> > label="数据管理" data=""/>
> >                                                            <node
> > label="系统维护" data=" dataSystemManagement.swf"/>
> >                                          </node>
> >            private function onTreeChange(eve:Event):void
> >            {
> >                    var url:String = eve.target.selectedItem.@data ;
> >                if (url != null && url != "")
> >                {
> >                        UILoader.unloadModule();
> >                        UILoader.url = url;
> >                }
> >            }
> >                ]]>
> >        </mx:Script>
> > </mx:Application>
> > //-----------------Module(dataSystemManagement.swf)-----------
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
> > layout="absolute">
> >        <mxabNavigator width="100%" height="100%" tabWidth="100"
> > id="myTabNavigator" >
> >                <mx:Form label="tab1" width="100%" height="100%">
> >                        <mx:FormItem label="Label">
> >                                <mx:Form width="500" height="500">
> >                                </mx:Form>
> >                        </mx:FormItem>
> >                </mx:Form>
> >                <mx:Form label="tab2" width="100%" height="100%">
> >                        <mx:FormItem label="Label2">
> >                                <mx:Form width="500" height="500">
> >                                </mx:Form>
> >                        </mx:FormItem>
> >                </mx:Form>
> >        </mxabNavigator>
> > </mx:Module>
分享到:
评论

相关推荐

    flex TabNavigator tab倒置

    在Flex开发中,TabNavigator组件是常用于创建带有选项卡的用户界面的工具。它允许用户在多个视图之间切换,每个视图对应一个选项卡。"flex TabNavigator tab倒置"这个标题可能指的是开发者想要实现一个特殊的布局,...

    设置TabNavigator组件的标签头的自定义皮肤

    在开发移动应用或者Web应用时,常常会使用到导航组件来组织不同的页面,其中TabNavigator是一种常见的导航方式,它在底部或顶部展示一系列标签,用户可以通过点击这些标签切换不同的页面。在React Native或React.js...

    Flex4.6 带图标的TabNavigator的使用

    在这个“带图标的TabNavigator的使用”示例中,我们将探讨如何为每个选项卡添加图标,从而增强用户界面的视觉吸引力和易用性。 首先,我们需要了解`TabNavigator`的基本结构。`TabNavigator`是`Container`类的一个...

    flex3 tabnavigator一个很好的例子

    Flex3 是Adobe Flex框架的第三个主要版本,它是一款...`.src`目录可能包含源代码文件,例如MXML和ActionScript文件,这些文件可能包含了TabNavigator的具体实现。要深入理解这个例子,你需要查看`.src`目录下的源代码。

    Flex tabNavigator 的初级应用

    NULL 博文链接:https://zhangyinyou.iteye.com/blog/671128

    flex 遮盖式 TabNavigator

    "遮盖式 TabNavigator"可能指的是在设计时或运行时TabNavigator的特定样式或行为,其中选项卡可能会覆盖其他内容,而不是简单地堆叠或切换。 这篇博客文章(虽然链接不可用)可能深入探讨了如何自定义Flex中的...

    Flex3 竖排TabNavigator

    默认情况下,TabNavigator的标签页是水平排列的,但在这个特定的实例中,我们将讨论如何将TabNavigator的标签页设置为垂直(竖排)显示。 创建竖排TabNavigator的关键在于自定义布局策略。在Flex3中,组件的布局由...

    Flex3 TabNavigator

    在Flex3中,TabNavigator是一种容器控件,用于展示多个视图,并且这些视图可以通过标签页进行切换。TabNavigator的每个标签页通常关联一个ViewStack或其他容器,用于存放不同的内容。然而,标准的TabNavigator并不...

    TabNavigator_ScrollableMenu

    "TabNavigator_ScrollableMenu"便是为满足这一需求而诞生的一种解决方案,它被誉为比flexlib.swc中的SuperTabNavigator更为高效和实用。 首先,我们要理解TabNavigator的基本概念。TabNavigator是一种容器,它可以...

    RN_ViewPager:StackNavigator加TabNavigator

    在React Native(RN)开发中,`StackNavigator`和`TabNavigator`是两个核心的导航组件,它们用于构建用户界面的导航结构。这篇文章将详细介绍这两个组件的使用和它们结合的实践。 `StackNavigator`是由React ...

    Flex中TabNavigator设置Tabs样式思路及

    在Flex框架中,TabNavigator组件是用来创建标签导航界面的一种方式,它能够展示一组标签页,每个标签页关联一个视图。在Flex应用中,为了提升用户体验,通常需要对TabNavigator的Tabs进行样式定制,使得它们更符合...

    flex 和 flexlib类库 实现 菜单和 TabNavigator

    NULL 博文链接:https://toeo.iteye.com/blog/644341

    TabNavigator一个reactnative底部菜单

    本文将深入探讨如何使用`TabNavigator`来实现一个React Native底部菜单,并涵盖相关的核心知识点。 `TabNavigator`是React Navigation库中的组件,它允许开发者轻松地创建带有底部标签的导航结构。React Navigation...

    flex TabNavigatorTab 选项卡标题标签皮肤设置

    这是一个封装好的flex项目,可以直接运行,TestTabNavigator.mxml是运行主页。里面定义了TabNavigator控件选中与被选中的皮肤类,皮肤类可以自己进行更改,也可以设置颜色渐变等等。希望对大家有帮助。

    Flex试题 .txt

    这个问题通常出现在尝试在非事件分发器对象上设置数据绑定时。解决方法是使用ObjectProxy类,它可以充当IEventDispatcher,从而允许在任何对象上进行数据绑定。 ### 8. MVC架构中,AS3时是写在MXML还是AS文件中? ...

    React-Native 实现点击Tab标签切换Tab页面

    在本例中,我们将使用`react-navigation`库,这是一个强大的React-Native导航解决方案,提供了多种导航类型,包括TabNavigator。 首先,确保已经安装了`react-navigation`库。如果还没有安装,可以通过npm或yarn...

    Flex 选项卡的实现

    如果需要在运行时动态添加或删除选项卡,可以通过`TabNavigator`的`addChild()`和`removeChild()`方法实现。例如,动态添加一个新的选项卡: ```actionscript var newTab:Canvas = new Canvas(); newTab.label =...

    Flex3连接access数据库实例源码.rar

    Flex3是一种基于Adobe Flash Player运行时的开源框架,主要用于创建丰富的互联网应用程序(RIA)。它提供了强大的组件库和编程模型,让开发者能够构建交互性强、视觉效果丰富的Web应用。Access则是微软开发的一种...

    Flex中实现多行tab的源代码

    在Flex开发中,创建用户界面时,我们常常会遇到需要展示多行Tab导航的情况。默认情况下,Flex的TabNavigator组件的TabBar控件只会在一行内显示Tab项,但通过自定义布局和样式,我们可以轻松实现多行Tab的展示。本...

    FLEX面试题

    7. **TabNavigator的creationPolicy**:`TabNavigator` 的 `creationPolicy` 属性用于控制其子项的创建策略,如设置为 `lazy` 表示只有在子项首次可见时才会创建它们。 8. **获取当前URL**:可以使用 `Application....

Global site tag (gtag.js) - Google Analytics