使用Menu时,需要定义数据源与组件
其中关于数据源的定义方式有4种选择,而常见的菜单一类的组件有Menu与MenuBar
Menu与MenuBar一个比较明显的区别就是:Menu不能在mxml中定义,而MenuBar可以。另外形象外观现实上也有差异
言归正传,重点是数据源的定义。
1.使用XML方式
在使用XML定义menu数据源时,请务必遵守e4x格式(你最好显示声明format="e4x"),并且通常都包含跟标签<root></root>,然后使所有菜单(包含子菜单)项的表签一致,至于标签名则随意了。一个可能的定义看起来如下:
<mx:XML format="e4x" id="menuXML2">
<root>
<menuitem label="menuI">
<menuitem label="menuI-I" enabled="false"/>
<menuitem label="menuI-II" enabled="true" type="normal"/>
</menuitem>
<menuitem label="menuII" toggled="false"/>
<menuitem label="menuIII" toggled="true"/>
</root>
</mx:XML>
事实上,这里的root名可以任意,e4x标准解析xml时是根据层次关系的
而不是标签名。
这里,我使用menu,前面说过不能在mxml中定义,于是一个可能的定义方式如下:
var menu1:Menu = Menu.createMenu(null,menuXML2,false);
menu1.show(100,200);//别忘了这个方法!
试着运行,你会神奇的发现,出来的菜单中全是代码。
这是为什么呢?
查阅API:
属性 类型 说明
enabled Boolean 指定用户可以选择菜单项 (true),还是不可以选择菜单项 (false)。如果未指定,则 Flex 将假定该值为 true 来处理此项目。如果您使用默认数据说明符,则数据提供程序必须使用 enabledXML 属性或对象字段来指定此特征。
groupName 字符串 (仅对 radio 类型有意义并且是必需的)用于关联单选组中的单选按钮项目的标识符。如果使用默认数据描述符,则数据提供程序必须使用 groupNameXML 属性或对象字段来指定此特征。
icon 类 指定图像资源的类标识符。此项目不适用于 check、radio 或 separator 类型。您可以使用 checkIcon 和 radioIcon 样式来指定一些图标,用于所选单选项目和复选框项目。菜单的 iconField 或 iconFunction 属性可以确定数据中用于指定图标的字段名称,或确定用于确定图标的函数。
label 字符串 指定控件中显示的文本。此项目适用于除 separator 之外的所有菜单项类型。菜单的 labelField 或 labelFunction 属性确定数据中指定标签的字段名称,或确定标签的函数。(如果数据提供程序采用 E4X XML 格式,则必须指定其中一个属性以显示标签。)如果数据提供程序是字符串数组,则 Flex 使用字符串值作为标签。
toggled Boolean 指定选择复选项目还是单选项目。如果未指定,则 Flex 处理该项目的方式将视同该值为 false 一样,并且该项目是不选中的。如果使用默认数据描述符,则数据提供程序必须使用切换 XML 属性或对象字段来指定此特征。
type 字符串 指定菜单项的类型。有意义的值为 separator、check 或 radio。Flex 将其它所有值或无类型条目的节点视为常规菜单条目。如果使用默认数据描述符,则数据提供程序必须使用类型 XML 属性或对象字段来指定此特征。
原来标签名是根据labelField来从xml数据源中获取的。我们未指定,默认便是获取xml代码
你只需要加上一行代码就可解决这个问题,完善后的代码看起来像是这样:
var menu1:Menu = Menu.createMenu(null,menuXML2,false);
menu1.labelField = "@label";
menu1.show(100,200);
2.使用XMLList
基本用法同xml,但是不同的地方在于,xmlList不需要root标签。因此,类似的代码看起来像是这样:
<mx:XMLList id="menuXML">
<menuitem label="menuI">
<menuitem label="menuI-I" enabled="false"/>
<menuitem label="menuI-II" enabled="true" type="normal"/>
</menuitem>
<menuitem label="menuII" toggled="false"/>
<menuitem label="menuIII" toggled="true"/>
</mx:XMLList>
3.使用Array
使用Array是最简单的方法,然而看起来可能并不如xml格式的那么直观,并且书写起来容易出错(你得小心别漏了逗号和花括号以及分号!)
类似的代码声明看起来像是这样“
[Bindable]
public var menuArray:Array = [
{label:"menuI",children:[
{label:"menuI-I",enabled:false},
{label:"menuI-II",enabled:true,type:"normal"}
]
},
{label:"menuII",toggled:false},
{label:"menuIII",toggled:true},
];
然后在as中“绑定”(应该叫调用更合适吧)时的代码和上面基本一致,不过有一点小的不同的地方就是,不需要显示声明menu1.labelField
= "@label";flex会自动将label字符串的值作为menu的label
4.使用<mx:Model>
相对来说使用model要受限得多。
从格式上来说model和采用e4x的xml格式相同,一个可能的model声明如下:
<mx:Model id="menuXML3">
<root>
<menuitem label="menuI">
<menuitem label="menuI-I" enabled="false"/>
<menuitem label="menuI-II" enabled="true" type="normal"/>
</menuitem>
<menuitem label="menuII" toggled="false"/>
<menuitem label="menuIII" toggled="true"/>
</mx:Model>
在as的代码调用(即menu的声明语句)也有区别
var menu1:Menu = Menu.createMenu(null,menuXML3.menuitem,false);
//menu1.labelField = "@label";//不需要这行语句!
menu1.show(100,200);
运行测试后也会出乎你的意料,只显示第一层次的菜单项而忽略子项!
也许这是Flex menu在处理model时的一个不同,另一方面这也使得model的使用更加灵活(你可以指定特定层次的数据项)
转载于:http://www.cnblogs.com/tech-romance/articles/1943410.html
分享到:
相关推荐
在本文中,我们将探讨如何使用Flex创建一个基于数据源的Menu Tree,特别是如何利用外部参数来指定数据源,并自定义节点的图标。 首先,让我们分析标题和描述中的关键知识点: 1. **数据源**:在Flex中,数据源通常...
Flex中的数据绑定机制使得菜单可以与数据源进行绑定,自动同步数据的变化。通过设置`dataProvider`属性,菜单项可以从数组集合中获取数据: ```actionscript menu.dataProvider = myArrayCollection; ``` 总结,...
在Flex中,`MenuBar`的数据源通常是XML或者ArrayCollection对象,它们包含了菜单项的定义。例如,我们可以创建一个XML文件来定义菜单结构: ```xml <menu> 文件"> 打开"/> 保存"/> 编辑"> 复制"/> ...
总之,“flex自定义多级系统菜单”涉及到的主要知识点有:XML数据绑定、Flex组件(如`Menu`和`MenuBar`)、数据源管理、事件处理以及可能的图形资源加载。通过这些技术,我们可以构建出灵活且易于维护的多级菜单系统...
2. **数据绑定**:在Flex中,报表通常通过数据绑定将数据源(如ArrayCollection或XMLList)与图表组件关联起来,使得数据的改变能够实时反映在报表上。 3. **XML数据源**:文件名如“xml_annotation_xml.html”、...
5. **数据绑定** - Flex支持数据绑定,这使得组件的属性可以自动与数据模型同步。例如,一个文本框的值可以与后台数据库字段进行绑定。 至于标签“源码”,这可能意味着在学习Flex组件时,我们需要查看和理解源代码...
- 数据提供程序控件可以从数据源获取数据,如ArrayCollection,可以通过数据绑定或者直接在MXML中定义数据源来设置。数据绑定允许控件实时响应数据源的变化,增强了应用程序的动态性。 使用FlexBuilder,开发者...
除了ArcGIS Server,还可以集成其他服务和数据源。 5. Deployment:部署过程涉及将Flex Viewer 应用程序发布到Web服务器,以便用户通过浏览器访问。这包括设置Flex Builder项目、配置Widget 和地图服务,以及确保...
Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的开放源代码框架,它基于ActionScript编程语言和MXML标记语言。本资源包含的是Flex的可视化组件源码,特别是关于菜单(Menu)的部分,同时也涉及到了List等...
5. Services and Data Feeds:除了地图服务,Flex Viewer还可以连接到各种数据源和服务,以提供更丰富的信息。 开发与部署: 开发Flex Viewer应用通常需要以下软件工具: - Adobe Flex3 Builder Standard Editor:...
可以通过直接在MXML中定义数据源或使用数据绑定的方式连接到后端数据。 3. **使用数据绑定和重复器(Repeater)**: - 数据绑定是Flex中非常重要的特性,它允许控件自动更新以反映数据模型的变化。使用`[Bindable]`...
这部分提供了地图和其他数据源的接入。虽然在Flex_Viewer中并未明确区分出数据层,但它实际上贯穿于整个系统之中。本层负责处理所有与数据获取和处理相关的任务。 #### 二、文件组织详解 为了更好地理解Flex_...
除了直接在MXML中定义数据外,还可以通过数据绑定的方式将控件与ActionScript中的数据源相连接。 - **数据绑定示例**: - 直接在MXML标签中定义数据: ```xml <!-- An inline data provider --> ```...
在Flex中,控件是构建用户界面的基本元素,本篇文章将深入探讨Flex的基本控件,包括文本控件、数据源控件以及菜单控件等。 首先,我们来看文本控件,主要包括Label、Text、TextInput和TextArea。 1. Label(标签)...
这些控件可以根据数据源动态展示列表内容。数据提供有两种方式:一是直接在MXML中定义数据,如Array或Collection,适用于静态数据和原型设计;二是通过数据绑定,将控件与ActionScript中的Array或Collection绑定,...
它允许开发者展示数据集合,并且可以与后端数据源进行绑定。开发者可以通过DataGrid组件实现复杂的数据操作功能,如拖拽列标题来自定义列的顺序,点击列标题对数据进行升序或降序排序。DataGrid默认显示模型中的所有...
5. **Services and Data Feeds**:其他服务和数据源,如WMS、KML等,可以集成到应用中提供额外的数据支持。 **Flex Viewer应用生命周期** 1. **启动阶段**:Flash Player加载并运行容器SWF,启动Flex Viewer应用...
Tree组件是基于MX容器的,它支持数据驱动,这意味着我们可以使用ArrayCollection或XML列表来作为数据源。每个树节点都可以包含子节点,并且可以通过展开和折叠操作来显示或隐藏这些子节点。 在Flex3中添加右键菜单...
Flex 3是基于ActionScript 3.0的一种开放源代码框架,用于构建跨平台的富互联网应用程序(RIA)。它提供了丰富的UI组件库以及强大的数据绑定和网络通信功能,使得开发者能够快速创建出功能完善且视觉效果出色的Web...