`

4、Flex3自定义事件、事件冒泡及传值、组件间的函数回调及传值

    博客分类:
  • FLEX
阅读更多

为了演示事件冒泡,demo写的可能有点繁琐。大家凑合看看。

1.project结构

 

2、主文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ax="com.future.visual.*" 
layout="absolute" creationComplete="init();">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import com.future.event.SelectSongEvent;
			private function init():void{
				this.addEventListener(SelectSongEvent.SELECT_SONG,handler);
			}
			private function handler(event:SelectSongEvent):void{
				this.Song.text = "当前选择的歌曲是: "+event.selectedSong;
			}
		]]>
	</mx:Script>
	<mx:HBox>
		<mx:Label id="Song" text="none" x="100"/>
		<ax:WorkSpace id="ws"/>
	</mx:HBox>
</mx:Application>

 3、WorkSpace.as

package com.future.visual
{
	import com.future.event.SelectSongEvent;
	
	import component.SongList;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.containers.Canvas;
	import mx.controls.Alert;
	import mx.controls.Button;
	import mx.managers.PopUpManager;
	public class WorkSpace extends Canvas
	{
		private var songs:XML = <SongList>
									<song id="1" name="水手" songer="张雨生"/>
									<song id="2" name="大海" songer="张雨生"/>
									<song id="3" name="不在犹豫" songer="beyond"/>
									<song id="4" name="海阔天空" songer="beyond"/>
								</SongList>; 
		public function WorkSpace()
		{
			var btn:Button = new Button();
			btn.id="song";
			btn.label = "Select Song";
			btn.x = 30;
			btn.y = 400;
			btn.addEventListener(MouseEvent.CLICK,changeHandler);
			this.addChild(btn);
		}
		private function changeHandler(event:Event):void{
			var sl:SongList = SongList(PopUpManager.createPopUp(this,SongList,true));
			sl.title = "SongList" ;
			sl.data = songs;
			sl.callbackFunction = changeSong;
           	PopUpManager.centerPopUp(sl);
		}
		
		private function changeSong(str:String):void{
			var e:SelectSongEvent = new SelectSongEvent(SelectSongEvent.SELECT_SONG,true);
			e.selectedSong = str;
			this.dispatchEvent(e);
		}
	}
}

 4、弹出窗口SongList.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
	<mx:Script>
		<![CDATA[
			import mx.managers.PopUpManager;
			import com.future.event.SelectSongEvent;
			
			import mx.controls.Alert;
			
			[Bindable]public var callbackFunction:Function;  //回调函数   
			[Bindable]public var str:String = "";  
			
			private function onQuit():void{
				PopUpManager.removePopUp(this);
            	return;
			}
			private function selectSong():void{
//				var sse:SelectSongEvent = new SelectSongEvent("select song",true);
//				sse.selectedSong = songList.selectedItem as String;
//				this.dispatchEvent(sse);				
				PopUpManager.removePopUp(this);
				callbackFunction.call(str,XML(songList.selectedItem).@name);
			}
		]]>
	</mx:Script>
	<mx:VBox>
		<mx:DataGrid id="songList" dataProvider="{XML(this.data).children()}">
			<mx:columns>
				<mx:DataGridColumn headerText="顺序" dataField="@id"/>
				<mx:DataGridColumn headerText="歌曲" dataField="@name"/>
				<mx:DataGridColumn headerText="歌手" dataField="@songer"/>
			</mx:columns>
		</mx:DataGrid>
		<mx:HBox>
			<mx:Button label="确定" click="{selectSong();}"/>
			<mx:Button label="退出" click="{onQuit();}"/>		
		</mx:HBox>
	</mx:VBox>
</mx:TitleWindow>

 5、自定义事件、这里的属性最好写成private类型,再加上set、get方法。我这里写的是public 的

package com.future.event
{
	import flash.events.Event;

	public class SelectSongEvent extends Event
	{
		public static const SELECT_SONG:String = "select song";
		public var selectedSong:String;
		
		public function SelectSongEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
		}
		
	}
}
 
0
0
分享到:
评论

相关推荐

    FLEX 事件机制-自定义事件介绍

    在Flex编程中,事件机制是...在实际项目中,自定义事件常用于实现复杂逻辑,如模块间的通信、状态更新通知以及异步操作的回调等场景。熟练掌握自定义事件的创建和使用,对于提升Flex应用程序的性能和用户体验至关重要。

    Flex试题 .txt

    在Flex中,它能确保回调在事件队列的末尾执行,避免UI更新和数据处理之间的冲突。 ### 23. 是否使用模块化开发,其优缺点是什么,使用方式及其局限性? 模块化开发在Flex中可以提高代码的可维护性和可重用性。优点...

    微信小程序快速开发 视频指导版pdf

    微信小程序快速开发(视频指导版)根据微信小程序的内容,全面系统地介绍了微信小程序的搭建和开发。本书主要内容有小程序注册、编程基础知识、小程序...冒泡事件、回调函数、上传下载和录音API、第三方工具和代码调试。

    微信小程序快速开发 视频指导版

    微信小程序快速开发:视频指导版》是2017年5月由人民邮电出版社出版的...冒泡事件、回调函数、上传下载和录音API、第三方工具和代码调试。本书特点为零基础入门,手把手教你小程序开发。配套开发视频,全程同步指导。

    2分钟教你实现环形/扇形菜单(基础版)

    总的来说,这个环形/扇形菜单的实现利用了React的组件化思想和CSS的布局及动画特性,提供了一种优雅的方式来创建交互式的UI元素。尽管这是一个基础版实现,但可以通过添加更多功能和优化,如自定义样式、更复杂的...

    ActionScript 3.0 Cookbook 中文完整版

    7. 异步编程和错误处理:理解如何使用回调函数、Promise或Future进行异步操作,以及如何有效地处理运行时错误,是编写健壮AS3.0程序的基础。 8. 高级特性:包括命名空间、访问修饰符、包私有性、抽象类和静态成员等...

    vue面试题,1000+前端面试真题,Html、Css、JavaScript、Vue、React、Node、TypeScript

    - **异步编程**:Promise、async/await的使用,以及与回调函数的区别。 - **事件循环与宏任务/微任务**:了解Event Loop,区别setTimeout和Promise.then的执行顺序。 4. **CSS与布局** - **盒模型**:理解...

    vue前端面试总结.txt

    设置响应 HTTP 请求状态变化的回调函数。 4. 发送 HTTP 请求。 5. 获取异步调用返回的数据。 6. 使用 JavaScript 和 DOM 实现局部刷新。 2. **清除浮动的技巧** - 清除浮动有多种方法,例如使用额外标签法、伪...

    前端(2).docxvue面试题初级

    提供的代码示例中,`console.log(1)`先执行,然后异步任务`setTimeout`和`Promise`的回调,其中`Promise`的`then`属于微任务,优先执行,故顺序为1634257。 9. **JavaScript内置类型**: - 基本类型:`null`、`...

    基于jQuery实现的横向图片手风琴插件源码.zip

    4. **jQuery插件开发**:学习如何封装自己的代码为jQuery插件,包括如何使用`.fn.extend()`方法扩展jQuery对象,以及如何设置插件选项和回调函数。 5. **事件监听和触发**:在手风琴效果中,图片的展开和收起需要...

    前端基础面试题1

    5. **异步编程**:包括回调函数、Promise、async/await等,用于处理非阻塞的I/O操作。 **浏览器** 1. **存储方式**:包括Cookie、localStorage、sessionStorage、IndexedDB等。 2. **HTTP请求**:GET用于获取资源,...

    一些前端面试题.pdf

    - **回调函数**:是最传统的异步编程方式,但在复杂的逻辑中容易导致回调地狱(Callback Hell)。 - **Promises**:改进了回调的问题,提供了一种更优雅的方式来处理异步操作。 - **Async/Await**:进一步简化了异步...

    Vue面试题,React面试题,JS面试题,HTTP面试题,工程化面试题,CSS面试题,算法面试题,大厂面试题,高频面试题

    - **异步编程**:包括回调函数、Promise、async/await等。 4. **HTTP**: - HTTP协议的主要方法:GET、POST、PUT、DELETE等。 - **HTTP状态码**:如200(成功)、404(未找到)、500(服务器内部错误)。 - **...

    web前端面试题.doc

    异步非顺序执行,利用回调、Promise或async/await处理非阻塞操作。 30. 性能优化方法: - 减少HTTP请求 - 压缩和合并资源文件 - 使用CDN加速 - 利用缓存策略 - 优化图片资源,如使用WebP格式,压缩图片大小 -...

    前端笔试面试题目总结.docx编程资料

    - **创建异步请求**:使用 `XMLHttpRequest` 或者 `fetch API` 发起异步请求,并通过回调函数或 Promise 处理响应结果。 - **异步请求完成过程**:通常包括打开连接、发送请求、接收响应、处理响应数据等步骤。 ###...

    leetcode新手刷题指南-Front-End-Interview:前端面试复习资料

    2. **异步编程**:理解回调函数、Promise、async/await 的异步处理方式。 3. **原型链与继承**:理解 JavaScript 的原型继承机制,以及类(Class)的使用。 4. **闭包**:掌握闭包的作用和应用场景,避免内存泄漏...

Global site tag (gtag.js) - Google Analytics