flex自定义组件(mxml文件)

2024-01-06 14:48
文章标签 自定义 组件 flex mxml

本文主要是介绍flex自定义组件(mxml文件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本来是每天写一点的,上次到现在差6篇,给自己提点醒,免得又忘了。今天本来是想看看TabNavigator中各个选项卡是一起初始化还是点开谁就初始化谁的,却莫名奇妙的看了一下自定义组件。关于选项卡的问题和代码都附在最后了,下面开始吧。

需要一个主页main.mxml,一个自定义组件mxmlModule.mxml

1.制作自定义组件

将要自定义组件的样式设置成自己想要的样子,这里我就画了个Label。

效果如图:

2.自定义属性

给自定义组件添加自定义的属性,这里我把自定义属性赋值给了Label的text属性,也就是说当我设置自定义属性时也就是在设置Label的text属性了。

3.自定义事件

我们也可以给自定义组件添加事件,事件可以是本来就有的,也可以是自己写的,自定义事件在我的flex父子页面交互(触发事件)这篇文章里有介绍。

事件定义好,但需要在什么时候派发是需要我们来写了。我这里有两个事件,myFunction事件是在自定义组件创建好的时候触发,myEvent是在单击Label时触发

初始化自定义组件完成时派发

单击Label时派发

4.在主页引入自定义组件

因为我是将主页和自定义组件是放在同级目录下的,所以直接使用*将自定义组件引入,其中的mm就是我们要使用组件时的前缀了。

5.使用自定义组件

这里直接将自定义组件使用标签形式创建出来,可以看到我在A选项卡中定义了一个自定义组件,在B选项卡中定义了一个自定义组件,

触发事件后所执行的方法定义

6.效果图

刚进入主页,因为创建第一个自定义组件完成,触发了事件,执行相应方法

可以看到Label中是有值的,这是因为我们设置了自定义属性了而那个自定义属性又是设置Label的text属性的

单击Label触发事件,执行相应方法

点击B选项卡,可以发现这时候才触发第二个自定义组件创建完成的事件,这是否说明了TabNavigator的各个选项卡是分开创建的。

B选项卡中自定义组件的单击事件没有设置相应的执行方法所以单击没反应

附上代码

main.mxml

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"  
  5.                xmlns:mm = "*"  
  6.                >  
  7.     <!-- 通过方法赋值的方式回调 -->  
  8.     <fx:Script>  
  9.         <![CDATA[ 
  10.             import mx.controls.Alert; 
  11.             internal function doMyEvent(event:Event):void{ 
  12.                 Alert.show("我触发事件了"); 
  13.             } 
  14.             public function doMyFunction(mark:String):void{ 
  15.                 Alert.show(mark); 
  16.             } 
  17.         ]]>  
  18.     </fx:Script>  
  19.       
  20.     <s:VGroup horizontalAlign="center" verticalAlign="middle" width="80%" height="200">  
  21.         <s:Button label="弹出选项卡页"/>  
  22.         <mx:TabNavigator  width="100%" height="100%">  
  23.             <s:NavigatorContent width="100%" height="100%" label="A选项卡">  
  24.                 <s:HGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">  
  25.                     <mm:mxmlModule myAttribute="A选项卡,点我触发事件"  myEvent="doMyEvent(event)" myFunction="doMyFunction('我是A选项卡')"/>  
  26.                 </s:HGroup>  
  27.             </s:NavigatorContent>  
  28.             <s:NavigatorContent width="100%" height="100%" label="B选项卡">  
  29.                 <mm:mxmlModule myAttribute="B选项卡,单击事件没有相应的执行函数,所以点我没反应的" myFunction="doMyFunction('我是B选项卡')"/>  
  30.             </s:NavigatorContent>  
  31.         </mx:TabNavigator>   
  32.     </s:VGroup>  
  33. </s:Application>  


mxmlModule.mxml

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.          xmlns:s="library://ns.adobe.com/flex/spark"   
  4.          xmlns:mx="library://ns.adobe.com/flex/mx" width="200" height="100"  
  5.          creationComplete="init()"  
  6.          >  
  7.       
  8.     <fx:Declarations>  
  9.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  10.     </fx:Declarations>  
  11.       
  12.     <fx:Script>  
  13.         <![CDATA[ 
  14.             [Bindable] 
  15.             private var _myAttribute:String;//绑定自定义组件 
  16.              
  17.             //属性的set,get方法,在页面上引用自定义组件的属性的时候其实是引用了这个set方法的方法名 
  18.             public function set myAttribute(_myAttribute:String):void{ 
  19.                 this._myAttribute = _myAttribute; 
  20.             } 
  21.              
  22.             public function get myAttribute():String{ 
  23.                 return _myAttribute; 
  24.             } 
  25.              
  26.             //点击label派发事件 
  27.             internal function onClick():void{ 
  28.                 this.dispatchEvent(new Event("myEvent")); 
  29.             } 
  30.             //组件创建完成时派发事件 
  31.             internal function init():void{ 
  32.                 this.dispatchEvent(new Event("myFunction")); 
  33.             } 
  34.              
  35.         ]]>  
  36.     </fx:Script>  
  37.       
  38.     <!--自定义事件-->  
  39.     <fx:Metadata>  
  40.         [Event(name="myFunction",type="flash.events.Event")]  
  41.         [Event(name = "myEvent",type ="flash.events.Event")]  
  42.     </fx:Metadata>  
  43.       
  44.     <s:VGroup width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">  
  45.         <s:Label text="{_myAttribute}" click="onClick()" />  
  46.     </s:VGroup>  
  47. </s:Group>  

这篇关于flex自定义组件(mxml文件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576680

相关文章

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (