解决 菜单重复打开问题..
按照以前的 思路自己保存一个 map 然后根据这个 map 里面的值.
来判断 是否已经打开标签.但是实际写的时候有点问题.
动态打开的标签的 children 数量 是不断减少的.
而用 delete 是删除不掉元素的.
但是发现 action的动态语言的灵活性还是挺强的.
于是 去查询文档找函数..
最后解决直接去访问 childern 里面的元素.
for each (var childTab:VBox in contentId.getChildren()){
if(childTab.label == myLabel){//只是通过标签名字判断.如果一样就直接打开标签.
contentId.selectedIndex = contentId.getChildIndex(childTab);
//跳转到指定标签.
return;
}
}
去判断 名字是否一致. 然后 通过.
contentId.getChildIndex(childTab);
可以得到 index.
这样标签选项就可以跳转过去了.
全部的 菜单代码.如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:flexlib="http://code.google.com/p/flexlib/"
width="100%" height="100%" pageTitle="我的系统测试."
initialize="sdk.send();" fontSize="12">
<mx:Script>
<![CDATA[
import flexlib.events.SuperTabEvent;
import mx.controls.SWFLoader;
import mx.containers.VBox;
import mx.controls.Label;
import flexlib.controls.SuperTabBar;
import flexlib.events.TabReorderEvent;
import flexlib.controls.tabBarClasses.SuperTab;
import mx.controls.Alert;
[Embed(source="./assets/document.png")]
private var document_icon:Class;
//tab左面的图标.
private var nodeAppOpenMap:Object = new Object();
//定义打开app类型数组.
private function treeChanged(event:Event):void
{//响应树点击的双击事件.
var nodeApp:String = compLibTree.selectedItem.@app;
var nodeLabel:String = compLibTree.selectedItem.@label;
//app是xml里面的定义的一个属性.
if (nodeApp != null && nodeApp != "")
{//如果有app这个属性.说明这个是一个叶子节点.开始加载那个flex文件.
addTab(nodeLabel, contentId, nodeApp);
//打开选项卡.带关闭按钮的选项卡.
}else{//如果里面没有app这个字段.说明这个是个文件夹.
compLibTree.expandItem(compLibTree.selectedItem, true, true);
//展开文件夹显示下面的内容.
}
}
private function addTab(myLabel:String, navigator:SuperTabNavigator,nodeApp:String):void {
//进行判断.看看新添加的childTab是否在getChildern()里面.如果有就打开.否则就新建.
for each (var childTab:VBox in contentId.getChildren()){
if(childTab.label == myLabel){//只是通过标签名字判断.如果一样就直接打开标签.
contentId.selectedIndex = contentId.getChildIndex(childTab);
//跳转到指定标签.
return;
}
}
var swfLoader:SWFLoader = new SWFLoader();
//动态加载flex类.在这里进行定义.每一个table新建立一个实例.
var curNum:Number = contentId.numChildren + 1;
var child:VBox = new VBox();
child.setStyle("closable", true);
//设置选项卡可以关闭.
child.label = myLabel;
//设置选项卡的名称.
child.icon = document_icon;
//设置选项卡的左面的文档图标.
swfLoader.source = nodeApp + ".swf";
//开始动态加载swf文件.
child.addChild(swfLoader);
navigator.addChild(child);
//将加载后的swf类放到child里面,再放到navigator里面.
contentId.selectedIndex = contentId.numChildren - 1;
}
private function sdkLoaded():void
{
explorerTree = XML(sdk.lastResult.node);
compLibTree.dataProvider = explorerTree;
}
]]>
</mx:Script>
<mx:HTTPService id="sdk" url="explorer.xml" resultFormat="e4x" result="sdkLoaded();"/>
<mx:XML id="explorerTree"/>
<mx:HDividedBox width="100%" height="100%">
<mx:Panel width="30%" height="100%" title="测试菜单">
<mx:Tree id="compLibTree" width="100%" height="100%" showRoot="false" labelField="@label"
change="treeChanged(event);"/>
</mx:Panel>
<flexlib:SuperTabNavigator id="contentId" scrollSpeed="25" dropShadowEnabled="false"
width="100%" height="100%" horizontalGap="0"
closePolicy="{SuperTab.CLOSE_ALWAYS}" dragEnabled="false" dropEnabled="false"
tabWidth="160"
/>
</mx:HDividedBox>
</mx:Application>
总结:
因为是类.是组件的缘故.所以 可以直接访问到属性.
方法.
是 Container 的方法和属性.
分享到:
相关推荐
NULL 博文链接:https://toeo.iteye.com/blog/644341
Flexlib开源类库是专为Flex 4设计的一个强大工具集,它提供了许多高级功能和组件,以增强Flex开发者的编程体验。这个类库的主要目标是简化开发过程,提高代码的可重用性和效率,同时也增加了应用程序的灵活性。...
Flexlib是一个针对Adobe Flex 3的开源类库,它提供了许多功能强大的组件和工具,旨在提升Flex开发者的生产力。这个压缩包"flexlib---2.5---flex3.rar"包含了适用于Flex 3版本的Flexlib 2.5,是开发Flex客户端应用的...
FlexLib是一个针对Adobe Flex开发的开源类库,它专门提供了许多高级组件,旨在增强和扩展Flex应用程序的功能。Flex是基于ActionScript 3.0的一种开放源代码的富互联网应用程序(RIA)框架,由Adobe公司开发。这个...
首先,`flexlib.swc`文件是Flex库的编译结果,它是ActionScript类库的一种打包方式。SWC文件可以直接导入到Flex Builder或Flash Professional中,以便在项目中使用其中的类和资源。在这个版本中,`flexlib.swc`很...
Flexlib是一个开源库,主要为Adobe Flex和Flash开发者提供了一系列的组件和工具,以增强他们的开发体验和项目功能。在2.5和2.4这两个版本中,它继续为Flex 4框架提供支持,Flex 4是Adobe Flex SDK的一个重大更新,...
Flexlib是一个针对Adobe Flex的开源组件库,它扩展了Flex框架的功能,提供了许多实用且功能强大的组件,使得开发者在构建富互联网应用程序(RIA)时能够更加高效和灵活。这个库包含了丰富的组件集,旨在增强Flex...
flexlib是一个开源的Flex组件库,它扩展了Flex的组件集合,提供了许多额外的组件和功能,包括对Accordion组件的增强。利用flexlib,我们可以自定义Accordion的外观和行为,例如改变折叠和展开动画、添加图标、设置...
Flexlib 2.5与Flex 4的兼容性使得开发者可以利用这些新特性,比如皮肤和样式系统,来实现复杂的应用设计。 2. **多样化组件**: Flexlib 2.5包含了多个自定义组件,这些组件在标准Flex组件库中可能无法找到: - *...
TabNavigator关闭 <s:Application xmlns:flexlib="flexlib.containers.*"> ...<flexlib:SuperTabNavigator id="tabNavigator" width="100%" height="100%" tabStyleName="tab" > </flexlib:SuperTabNavigator>
Flexlib源码是一个开源库,主要针对Adobe Flex技术进行开发,它为开发者提供了一系列的工具和组件,以增强Flex应用程序的功能和性能。Flex是基于ActionScript 3.0的编程框架,用于构建富互联网应用程序(RIA)。在...
通过研究这些模式,我们可以更好地理解如何在Flex中实现可维护和可扩展的代码。 4. **实例应用**:提供的实例可以帮助我们看到如何在实际项目中使用Flexlib组件。这些示例可能包括各种功能的演示,如动态数据绑定、...
其中,Flexlib.swc是一个至关重要的组件,它是Adobe Flex框架的重要组成部分,用于开发具有高度交互性和动态性的Web应用。本文将详细探讨Flexlib.swc的内涵、作用及其在实际开发中的应用。 一、Flexlib.swc简介 ...
flexlib是一款专为Flex(Adobe Flex)开发的开源库,它为Flex开发者提供了丰富的功能和便利。Flex是基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA),而flexlib则是其生态系统中的重要一环,极大...
Flexlib是Google发布的一个开源组件库,专门为Adobe Flex开发者提供了一系列功能丰富的组件和工具,以增强Flex应用程序的用户体验和开发效率。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网...
AS3 类库资源大集合包含了众多实用的 ActionScript 3(AS3)库,这些库主要服务于 Flash 和 Flex 开发者,提供了丰富的功能,如网络API接口、UI组件、动画效果、数据处理以及游戏开发等。以下是部分核心知识点的详细...
使用FlexLib时,开发者需要了解flexbox的基本概念,如容器(flex container)和项目(flex item),以及相关的属性,如flex-direction、justify-content、align-items等。这些属性可以帮助开发者精确控制元素的排列...
出色的Flex开源组件库FlexLib, 高质量的开源Flex UI组件库项目
"TabNavigator_ScrollableMenu"便是为满足这一需求而诞生的一种解决方案,它被誉为比flexlib.swc中的SuperTabNavigator更为高效和实用。 首先,我们要理解TabNavigator的基本概念。TabNavigator是一种容器,它可以...