`
shlei
  • 浏览: 287989 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Flex根据组件id字符串获取组件对象

阅读更多
有这样一个需求:假如你new了一百次Button,同时这些button的id分别赋值如btn1.id = "button1"; btn2.id = "button2";以此类推。当100个button建立后,我想直接对其第20个button进行操作,那么应该如何实现呢?本文将介绍如何在Flex直接获取某个组件的对象。

Flex中直接获取某个组件的对象方案1:

遍历这些button所在的容器,然后通过getElementAt()这样的方式获取。
这是常规的做法,这种做法的弊端:每次都需要遍历100次button,显然效率很慢。

Flex中直接获取某个组件的对象方案2:

当建立新的button后,将这个button存放到哈希表里面,其键-值的设定关系:key = button.id; value = button;即键里面保存的button的id,而value里面保存的button对象。object[ 'button20' ] = btn20;

在使用的时候,直接取得第20个button的做法:var button : Button = object[ 'button' + 20 ];

这样做无疑要比第一种方式快很多倍,但是这种做法的弊端:需要建立一个哈希表,当你的数据过多的时候,无疑这个哈希表将会很大。

Flex中直接获取某个组件的对象方案3:
所有的组件都会在document中,不用管父组件,直接用this肯定能取到,debug看一下this里的对象就知道了
我们第一不需要遍历100次button容器,第二不需要建立一个哈希表。我们只是用this[xxxx]的方式,即可取出第20个button。

具体做法:var button : Button = this[ 'button' + 20 ];即可完成操作。无论这些button在什么地方?在什么样深度的容器里面,只要是它仍在这个project里面,就可以使用this[xxx]的方式取出。
无疑这种做法是高效的,其实我们仔细看一下this[xxx]其实也是使用哈希表的方式,只不过比方案2好在,我们不需要再建立一个哈希表,这样能节省很多的内存空间。

具体请看一下第三种方法的demo:
<?xml version="1.0" encoding="utf-8"?>
<!-- @author shilei, corporation YD -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			private var newFontStyle:String;      
			private var newFontSize:int;      
			
			public function changeStyle( s : String ) : void {      
				s = "button" + s;          
				this[ s ].setStyle( "fontSize", 20 );      
			}
		]]>
	</fx:Script>
	<mx:Button id="button1" click="changeStyle('2')" label="Button 1" />      
	<mx:Button id="button2" click="changeStyle('1')" label="Button 2" /> 
</s:Application>

第三种方法的弊端是只能获取编译时创建的组件,不能获取运行时用代码动态创建的组件,这时候只能通过第一和第二种方法才可以获取组件对象。

From http://developer.51cto.com/art/200907/136258.htm
分享到:
评论

相关推荐

    flex访问java对象

    根据给定的信息,本文将详细解释如何通过Flex访问Java对象,并提供一个具体示例来帮助理解整个过程。本文主要分为以下几个部分:环境搭建、Java类编写、配置文件编写、Flex应用编写以及最终运行效果。 ### 一、环境...

    Flex 加载Base64编码的二进制字符串图片

    ### Flex 加载Base64编码的二进制字符串图片 #### 概述 在Flex开发中,有时我们需要处理Base64编码的二进制数据,尤其是图像数据。Base64编码是一种常用的数据编码方式,可以将二进制数据转换为文本格式以便在网络...

    flex获得html容器传递的url参数值

    `getParams()`通过`ExternalInterface.call()`获取查询字符串,并将其分解为参数对,存储在`params`对象中。然后,这些参数值会被显示在`dispID`文本组件上。 总的来说,要从HTML容器传递的URL参数值到Flex应用,你...

    flex解析xml框架实例

    在Flex中,你可以使用XML类的构造函数来创建新的XML对象,或者解析已经存在的XML字符串或文件。 在"flex解析xml框架实例"中,我们关注的是如何使用XML类解析从HTTPService获取的数据。HTTPService是Flex提供的一个...

    Flex Tree 源码

    根据提供的文件信息,本文将对“Flex Tree 源码”进行详细解析,重点解读如何通过 Flex、Java 和 Tree 代码结合 XMLList 来生成 XML 文件,并构建树形数据结构。 ### 一、理解 Flex、Java 和 Tree 代码 #### 1.1 ...

    Flex HTTPService如何给后台传递参数 .doc

    URLVariables类是Flex中用于将变量序列化为URL查询字符串的工具。这种方法适用于GET和POST请求,但通常在POST请求中更为常见,因为它可以处理更复杂的数据结构。以下是如何使用URLVariables传递参数的步骤: 1. **...

    flex中tree的数据源是xml

    - 使用`ConfigurationManager.AppSettings["ConnectionString"]`获取数据库连接字符串,确保应用程序能正确连接到数据库。 2. **数据库查询**: - 建立数据库连接:`SqlConnection conn = new SqlConnection(str)...

    Flex和JS的相互调用,传参

    因此,基本类型的转换通常是自动的,但复杂对象(如自定义类实例)可能需要序列化为JSON字符串进行传递。 在实际项目中,`FlexJs调用`可能涉及到的问题包括跨域安全、参数验证、错误处理等。确保正确设置Flash ...

    Flex数据访问:WebService

    在.NET和Flex之间的数据交互,我们可以使用各种数据类型,例如字符串、对象、DataTable、List, ArrayList等。下面以两个示例来说明: 1. 返回对象: 在.NET中,我们可以创建一个Web方法(WebMethod),如`...

    Fabridge-沟通javascript与flex的桥梁

    在这个例子中,`testFunc`接受一个字符串参数并显示一个警告对话框。同时,我们需要在Flex应用中引入`FABridge`组件,它提供了JavaScript与Flex交互的接口。 ```xml *" /&gt; ``` 在JavaScript端,可以通过创建一...

    flex支持过滤的input

    数据源可以是数组、XML列表、数据集等,过滤方法通常包括字符串匹配、正则表达式匹配等。过滤后的结果再更新到视图,如List、DataGrid或其他显示组件上,实时展示匹配的项。 具体步骤如下: 1. **创建Input组件**...

    flex 经典教程下载

    2. 掌握MXML和ActionScript的语法,包括基本控件、集合对象和字符串操作。 3. 应用动态效果,如移动、旋转和放大,以及创建自定义效果。 4. 使用定时器和事件处理,包括鼠标和键盘事件,编写交互式应用。 5. 了解...

    Flex中的小技巧备忘

    通过调用此方法,我们可以将指定的字符串复制到系统的剪贴板上,从而使得用户可以在其他应用中粘贴这些信息。例如: ```as System.setClipboard("这是一个示例文本"); ``` 这行代码会将“这是一个示例文本”复制到...

    Flex实现国际化样例

    5. **ActionScript的国际化**:在ActionScript代码中,可以通过`ResourceBundle.getBundle()`方法获取资源包,然后使用`getString()`方法获取对应的字符串。 6. **事件监听和处理**:在用户改变语言设置时,可能...

    flex外部读取xml

    - 对于`Line`,根据起始和结束ID从`nodeMap`中获取相应的`BaseNodeContainer`实例,创建`TopoLine`对象,并添加到容器中。 4. `mx:Topo` 是一个自定义组件,它的`creationComplete`属性绑定到`complete()`函数,...

    FLEX操作XML&JSON

    1. **解析JSON**:Flex使用`flash.utils.parseJSON()`函数将JSON字符串转换为ActionScript对象,便于操作。例如,`var jsonData:Object = flash.utils.parseJSON(jsonString);` 2. **展示JSON数据**:与XML类似,`...

    flex解析xml

    1. **XML类**:创建XML对象可以通过XML构造函数,直接传入XML字符串或者文件URL。例如,假设我们有一个名为"data.xml"的文件,内容如下: ```xml &lt;book id="1"&gt; &lt;title&gt;Book1 &lt;author&gt;Author1 &lt;book id="2"&gt;...

    fusioncharts/widgets for flex 的swf 与swc文件

    6. **使用示例**: 创建一个Flex应用时,你可能需要在MXML或ActionScript文件中创建一个`FusionCharts`对象,设置`chartId`、`width`、`height`属性,以及数据XML或JSON字符串。接着,使用`loadChart()`方法加载SWF并...

    基于Vue20的移动端PC端验证码输入组件

    通常,这种组件会显示一串随机字符,用户需要在指定时间内正确输入以完成验证过程。 要创建这样一个组件,我们首先需要确保环境配置正确。你需要安装 Node.js 和 Vue CLI(命令行工具),通过运行以下命令: ```...

    flex与servlet交互

    例如,在Flex中对字符串进行编码和解码时可以使用如下方法: - **编码**: - `private function htmlParaEncoding(para:String):String{` - `return encodeURIComponent(para);` - `}` - **解码**: - `private...

Global site tag (gtag.js) - Google Analytics