实现功能:
1.由外部参数flashvars指定数据源的文件位置或render链接。
2.在源数据上加href和target属性来控制打开窗口。
3.可自定义父节点和子节点图标,不设置采用系统默认。
直接上源码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
fontFamily="simsun" fontSize="12"
layout="absolute" creationComplete="menu.send();" width="242" height="442" initialize="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.ListEvent;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var strUrl:String = "TreeMenus.xml";
[Bindable]
private var menus:XML;
[Bindable]
[Embed("open.gif")]
public var openicon:Class;
[Bindable]
[Embed("close.gif")]
public var closeicon:Class;
[Bindable]
[Embed("leaf.gif")]
public var leaficon:Class;
private function init():void
{
this.strUrl = this.parameters.url;
}
private function LoadMenu(event:ResultEvent):void
{
menus = XML(event.result);
var results:XMLList = menus.node;
tree1.dataProvider = results;
}
//菜单图标设置
private function treeIcon(item:Object):Class
{
var node:XML = XML(item);
trace('icon:' + node.@icon);
var str : String = node.@icon;
//已经设置图标
if(node.hasOwnProperty("@icon"))
{
if(node.@icon == 'openicon')
{
return openicon;
}
if(node.@icon == 'closeicon')
{
return closeicon;
}
if(node.@icon == 'leaficon')
{
return leaficon;
}
}
else
{
//如果没定义icon就直接用默认的
if(!tree1.dataDescriptor.isBranch(item))
{
return tree1.getStyle("defaultLeafIcon");
}
if(tree1.isItemOpen(item))
{
return tree1.getStyle("folderOpenIcon");
}
else
{
return tree1.getStyle("folderClosedIcon");
}
}
return null;
}
/** *//**
* 菜单树单项点击事件
* */
private function itemClickHandler(evt:ListEvent):void
{
var item:Object = Tree(evt.currentTarget).selectedItem;
if (tree1.dataDescriptor.isBranch(item))
{
//tree1.expandItem(item, !groupTree.isItemOpen(item), true);
}
else
{
//得到节点对象
var node:XML = XML(item);
//如果有属性href
if(node.hasOwnProperty("@href") && node.hasOwnProperty("@target"))
{
openURL(node.@href,node.@target);
}
if(node.hasOwnProperty("@href") && (node.hasOwnProperty("@target") == false))
{
//没有指定target默认在新窗口中打开
openURL(node.@href,"_blank");
}
}
}
//页面跳转的方法
private function openURL(url:String ,target:String):void
{
var request:URLRequest = new URLRequest(url);
navigateToURL(request,target);
}
]]>
</mx:Script>
<mx:HTTPService url="{strUrl}" id="menu" useProxy="false"
showBusyCursor="true" result="LoadMenu(event)" resultFormat="xml"/>
<mx:Tree iconFunction="treeIcon" id="tree1" width="100%" height="100%" labelField="@label" itemClick="itemClickHandler(event)"/>
</mx:Application>
调用的时候在flashvars里面加上url=xxx
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="tree" width="242" height="442"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="${ctx}/js/as/menu.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<!-- 指定菜单的数据源 -->
<param name="flashvars" value="url=${ctx}/user/user!renderMenu.do?id=${user.usid}" />
<embed src="tree.swf" quality="high" bgcolor="#869ca7"
width="242" height="442" name="tree" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
其中url可以指定xml文件的位置或者render的链接
示例文件xml:
<?xml version='1.0' encoding='utf-8'?>
<menus>
<node label='系统管理' icon="openicon">
<node label='用户管理' icon="closeicon"
href='/main/user/user-list.jsp' target='mainFrame' />
<node label='权限管理' href='/main/user/action-list.jsp'
target='mainFrame' />
<node label='角色管理' href='/main/user/role-list.jsp'
target='mainFrame' />
<node label='域管理' href='/main/user/user-list.jsp'
target='mainFrame' />
<node label='测试'>
<node label='sub folder' href='' target='mainFrame' />
</node>
</node>
<node label='客服'>
<node label='终端信息查询' href='' target='mainFrame' />
<node label='客服问题-解答记录' href='' target='mainFrame' />
</node>
</menus>
分享到:
相关推荐
在本文中,我们将探讨如何使用Flex创建一个基于数据源的Menu Tree,特别是如何利用外部参数来指定数据源,并自定义节点的图标。 首先,让我们分析标题和描述中的关键知识点: 1. **数据源**:在Flex中,数据源通常...
Tree组件是基于MX容器的,它支持数据驱动,这意味着我们可以使用ArrayCollection或XML列表来作为数据源。每个树节点都可以包含子节点,并且可以通过展开和折叠操作来显示或隐藏这些子节点。 在Flex3中添加右键菜单...
6. **Tree下拉列表里含有Menu样式**:Flex的Tree组件可以嵌套各种组件,包括下拉列表。通过定制TreeItemRenderer,我们可以实现树节点点击后展开一个具有Menu样式的下拉列表,提供更丰富的交互体验。 7. **flex的增...
- 这些控件包括ComboBox、List、HorizontalList、DataGrid、Tile、Menu和Tree等,它们可以从数据提供程序获取数据,展示列表信息。数据提供可以通过两种方式设置: - **内联数据提供**:直接在MXML标签内部定义...
- 数据源:菜单项通常由数组集合提供,开发者可以指定一个包含菜单项信息(如标题、图标和关联命令)的数据源。 - 事件处理:菜单项的选择通常会触发事件,如`itemClick`,开发者需要为此编写事件处理器。 - 配置项...
- **基于列表的控件**:包括ComboBox、List、HorizontalList、DataGrid、Tile、Menu和Tree等。这些控件可以从数据源获取数据,并显示为列表形式。除了直接在MXML中定义数据外,还可以通过数据绑定的方式将控件与...
- 基于列表的控件如`ComboBox`、`List`、`DataGrid`、`Menu`和`Tree`,它们通常从数据提供程序获取数据,展示列表或树状结构的信息。可以通过直接在MXML中定义数据源或使用数据绑定的方式连接到后端数据。 3. **...
2. **基于列表的控件**:如ComboBox、List、HorizontalList、DataGrid、Tile、Menu和Tree等,它们可以从数据提供程序获取数据。这些控件可以根据数据源动态展示列表内容。数据提供有两种方式:一是直接在MXML中定义...
4. **基于列表的组件**:Flex提供了多种基于列表的组件,如List、Tree、Menu、TileList、HorizontalList等。这些组件用于以不同的视觉形式展示一组集合的数据。例如,List以垂直列的形式展示数据,而HorizontalList...
在Flex中,控件是构建用户界面的基本元素,本篇文章将深入探讨Flex的基本控件,包括文本控件、数据源控件以及菜单控件等。 首先,我们来看文本控件,主要包括Label、Text、TextInput和TextArea。 1. Label(标签)...
Flex 3是基于ActionScript 3.0的一种开放源代码框架,用于构建跨平台的富互联网应用程序(RIA)。它提供了丰富的UI组件库以及强大的数据绑定和网络通信功能,使得开发者能够快速创建出功能完善且视觉效果出色的Web...
`Ext.data.DataProxy` 是 `Ext.data.Store` 的一部分,负责从数据源获取数据。常见的 `DataProxy` 类型包括: - **AjaxProxy**: 通过 AJAX 调用获取数据。 - **MemoryProxy**: 从内存中读取数据。 - **RestProxy**:...
- **数据管理**:Grid组件支持多种数据源管理方式,如本地数据、远程数据等。 - **功能扩展**:Grid组件支持分页、排序、筛选等功能,极大提高了数据展示的灵活性。 #### 26. XTemplate - **模板引擎**:XTemplate...