Flex回调函数

        首先要说明一下什么是回调函数?有什么作用?

        回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另一个方法调用的,用于对该事件或条件进行相应。

        回调函数实现的过程:

1. 定义一个回调函数;

        2. 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;

        3. 当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

        回调函数使调用者和被调用者分开,所以调用者不关心谁是被调用者。它只需要知道存在一个具有特定原型和限制条件的被调用函数。

        像之前写过的事件机制中,可以通过button.addEventListener(MouseEvent.Click, buttonClickHandler)的方式监听事件,这里就是一种回调函数的应用,我们先定义了一个buttonClickHandler方法,然后在初始化的时候将buttonClickHandler函数引用注册给addEventListener方法,当MouseEvent.Click发生的时候,通过这个函数引用回调我们写的buttonClickHandler方法,这个过程就是对回调函数的完美的应用。

        下面还是通过代码的方式,自己实现一个回调函数的应用,之前《Flex事件机制(二)》使用事件在父子组件之间传递数据,那么本篇通过回调函数来实现,遵循的过程就是文中提到的回调函数实现的过程。

        主应用文件Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<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" 
			   xmlns:components="components.*"
			   creationComplete="creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;			
			// 2. 初始化的时候,将回调函数的函数指针注册给调用者
			protected function creationCompleteHandler(event:FlexEvent):void
			{
				component.callbackFunction = showData;
			}			
			// 1. 定义一个回调函数
			private function showData(data:String):void
			{
				textArea.text = data;
			}			
		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<s:TextArea id="textArea" />
	<components:component1 id="component" />
</s:Application>

        子组件文件components/component1.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx">	
	<fx:Script>
		<![CDATA[
			public var callbackFunction:Function;			
			//3. 当按钮被点击的时候,使用函数指针调用回调函数对事件进行处理。
			protected function buttonClickHandler(event:MouseEvent):void
			{
				// 第一个参数是callbackFunction所在的对象,第二个参数是callbackFunction需要的参数
				callbackFunction.call(this.parent, "哈哈");
			}
		]]>
	</fx:Script>
	<s:Button label="显示内容" click="buttonClickHandler(event)"/>
</s:Group>

        Flex回调函数的基本应用就介绍完了,非常简单吧。欢迎大家对我的博文提出意见,因为这段时间参与的一个项目主要是Flex开发,所以总结的Flex比较多,也都比较初级,谢谢大家的支持。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hrscy

Swift2.1-下标脚本下标脚本

类,结构体和枚举可以定义下标脚本,下标脚本可以认为是访问集合(collection),列表或序列的成员元素。你可是使用下标脚本来设置或通过索引检索值,而不需要调...

603
来自专栏阿凯的Excel

Python读书笔记8(列表-相关函数)

今天和大家分享的是列表的相关函数。 其实今天分享的函数对于字符串、列表、元组都可以使用,已经会的当做复习咯。 至于神马是元组,后续会分享哦! 一、In Or N...

2745
来自专栏Python中文社区

Python中典型内建函数的用法

专栏作者简介 王 洪 永 在读大学生,学习过C, C++, Python, 了解java,html, javascript基础。其中就Python而言,自己写过...

1866
来自专栏Python爬虫实战

Python指南:高级程序设计之过程型程序设计进阶

Python 中,函数本身是一种对象,函数名就是对函数的对象引用。如果我们写一个函数名,其后面没有小括号,Python 会知道我们是将其当做对象引用。

1004
来自专栏小樱的经验随笔

getline函数(精华版)

在我的印象中,getline函数经常出现在自己的视野里,模糊地记得它经常用来读取字符串 。但是又对它的参数不是很了解,今天又用到了getline函数,现在来细细...

2834
来自专栏Android干货

山东理工大学SDUT - ACM OJ 题: Python代码 及分析

1313
来自专栏蓝天

C语言编程程序的内存如何布局

C语言程序在内存中各个段的组成   C语言程序连接过程中的特性和常见错误   C语言程序的运行方式   一:C语言程序的存储区域   由C语言代码(文本...

692
来自专栏武培轩的专栏

JVM内存模型

运行时数据区域 Java虚拟机(Java Virtual Machine,简称JVM)在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这...

3564
来自专栏HTML5学堂

JavaScript 运行机制之执行顺序详解

1、代码块 定义:JavaScript中的代码块是指由<script>标签分割的代码段。 示例: <script> 代码块一 </script> <scr...

26111
来自专栏和蔼的张星的图像处理专栏

55. 比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD",返回 tru...

791

扫码关注云+社区