`
fatherican
  • 浏览: 54067 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Flex Menu 各种数据源定义方式的区别

 
阅读更多

使用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实现代码

    在本文中,我们将探讨如何使用Flex创建一个基于数据源的Menu Tree,特别是如何利用外部参数来指定数据源,并自定义节点的图标。 首先,让我们分析标题和描述中的关键知识点: 1. **数据源**:在Flex中,数据源通常...

    flex常用动态菜单

    Flex中的数据绑定机制使得菜单可以与数据源进行绑定,自动同步数据的变化。通过设置`dataProvider`属性,菜单项可以从数组集合中获取数据: ```actionscript menu.dataProvider = myArrayCollection; ``` 总结,...

    Flex创建菜单栏

    在Flex中,`MenuBar`的数据源通常是XML或者ArrayCollection对象,它们包含了菜单项的定义。例如,我们可以创建一个XML文件来定义菜单结构: ```xml &lt;menu&gt; 文件"&gt; 打开"/&gt; 保存"/&gt; 编辑"&gt; 复制"/&gt; ...

    flex自定义多级系统菜单

    总之,“flex自定义多级系统菜单”涉及到的主要知识点有:XML数据绑定、Flex组件(如`Menu`和`MenuBar`)、数据源管理、事件处理以及可能的图形资源加载。通过这些技术,我们可以构建出灵活且易于维护的多级菜单系统...

    Flex报表

    2. **数据绑定**:在Flex中,报表通常通过数据绑定将数据源(如ArrayCollection或XMLList)与图表组件关联起来,使得数据的改变能够实时反映在报表上。 3. **XML数据源**:文件名如“xml_annotation_xml.html”、...

    Flex的组件

    5. **数据绑定** - Flex支持数据绑定,这使得组件的属性可以自动与数据模型同步。例如,一个文本框的值可以与后台数据库字段进行绑定。 至于标签“源码”,这可能意味着在学习Flex组件时,我们需要查看和理解源代码...

    FlexBuilder教程.pdf

    - 数据提供程序控件可以从数据源获取数据,如ArrayCollection,可以通过数据绑定或者直接在MXML中定义数据源来设置。数据绑定允许控件实时响应数据源的变化,增强了应用程序的动态性。 使用FlexBuilder,开发者...

    Arcgis flexView

    除了ArcGIS Server,还可以集成其他服务和数据源。 5. Deployment:部署过程涉及将Flex Viewer 应用程序发布到Web服务器,以便用户通过浏览器访问。这包括设置Flex Builder项目、配置Widget 和地图服务,以及确保...

    flex可视化组建源码(菜单)

    Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的开放源代码框架,它基于ActionScript编程语言和MXML标记语言。本资源包含的是Flex的可视化组件源码,特别是关于菜单(Menu)的部分,同时也涉及到了List等...

    ESRI Flex Viewer框架

    5. Services and Data Feeds:除了地图服务,Flex Viewer还可以连接到各种数据源和服务,以提供更丰富的信息。 开发与部署: 开发Flex Viewer应用通常需要以下软件工具: - Adobe Flex3 Builder Standard Editor:...

    Flex教程Flex教程

    可以通过直接在MXML中定义数据源或使用数据绑定的方式连接到后端数据。 3. **使用数据绑定和重复器(Repeater)**: - 数据绑定是Flex中非常重要的特性,它允许控件自动更新以反映数据模型的变化。使用`[Bindable]`...

    Flex_Viewer解析

    这部分提供了地图和其他数据源的接入。虽然在Flex_Viewer中并未明确区分出数据层,但它实际上贯穿于整个系统之中。本层负责处理所有与数据获取和处理相关的任务。 #### 二、文件组织详解 为了更好地理解Flex_...

    flex_教程.doc

    除了直接在MXML中定义数据外,还可以通过数据绑定的方式将控件与ActionScript中的数据源相连接。 - **数据绑定示例**: - 直接在MXML标签中定义数据: ```xml &lt;!-- An inline data provider --&gt; ```...

    flex基本控件总结

    在Flex中,控件是构建用户界面的基本元素,本篇文章将深入探讨Flex的基本控件,包括文本控件、数据源控件以及菜单控件等。 首先,我们来看文本控件,主要包括Label、Text、TextInput和TextArea。 1. Label(标签)...

    Flex Builder教程

    这些控件可以根据数据源动态展示列表内容。数据提供有两种方式:一是直接在MXML中定义数据,如Array或Collection,适用于静态数据和原型设计;二是通过数据绑定,将控件与ActionScript中的Array或Collection绑定,...

    Flex基础培训-3-组件和布局

    它允许开发者展示数据集合,并且可以与后端数据源进行绑定。开发者可以通过DataGrid组件实现复杂的数据操作功能,如拖拽列标题来自定义列的顺序,点击列标题对数据进行升序或降序排序。DataGrid默认显示模型中的所有...

    基于ESRI Flex Viewer框架的ArcGIS Server开发

    5. **Services and Data Feeds**:其他服务和数据源,如WMS、KML等,可以集成到应用中提供额外的数据支持。 **Flex Viewer应用生命周期** 1. **启动阶段**:Flash Player加载并运行容器SWF,启动Flex Viewer应用...

    flex3 Tree右键菜单

    Tree组件是基于MX容器的,它支持数据驱动,这意味着我们可以使用ArrayCollection或XML列表来作为数据源。每个树节点都可以包含子节点,并且可以通过展开和折叠操作来显示或隐藏这些子节点。 在Flex3中添加右键菜单...

    Flex 3 组件实例与应用(2009版)

    Flex 3是基于ActionScript 3.0的一种开放源代码框架,用于构建跨平台的富互联网应用程序(RIA)。它提供了丰富的UI组件库以及强大的数据绑定和网络通信功能,使得开发者能够快速创建出功能完善且视觉效果出色的Web...

Global site tag (gtag.js) - Google Analytics