Flex4.6事件监听机制的测试和总结-图文+源代码
FLEX展现PHP连接ORACLE取到的数据实例教程
FLEX展现PHP连接ORACLE取到的数据实例教程网上的教程大都是用AMFPHP去开发MYSQL数据库的,但是对于大中型数据库ORACLE怎么与AMFPHP的配置、开发却讲得很少,大多都只是讲到访问phpinfo.php能看到OCI8驱动的信息为止了,且还错误重重。
由于我单位使用的数据库使用的是ORACLE 数据库,因此想使用FLEX结合AMFPHP开发一些应用,因此研究了一下午,这个过程还挺艰辛,所以写下来,以便那些同样需要开发ORACLE的网友们少走弯路。
PHP的安装就不多说了,我用的是phpStudy绿色版,解到一个目录中就可以使用了,如果你的机器上有APACHE和MYSQL,要先停掉原先的应用。
然后是安装AMFPHP,这个很简单,下载后解到PHP的WWW目录下,打开AMFPHP 目录中的gateway.php这个配置文件,将编码设置改为$gateway->setCharsetHandler("iconv", "gb2312", "gb2312"); ,因为一般ORACLE的默认字符是GB2312或是GBK的,因此要改成与你ORACLE服务器字符集相同的配置。
不然显示出来会是乱码。
下一步是进行ORACLE客户端的配置,这里请注意一定要安装Oracle10g的客户端,我的机器用的是oracle8的客户端死活在phpinfo中不出现OCI的驱动,浪费了我许多时间。
因此请先去安装instantclient,现在的最新版本是instantclient-basic-win32-11.1.0.7.0.zip 这个压缩包,在oracle网站上就有,自己去搜一下。
下了之后,随便先个目录解压缩,比如是C:/OracleClient/Bin,并且要将这个路径添加到系统变量path中去,而且这里要说明的一点,最好添加在path路径的开头,因为我的原来的Oracle客户端是8.0的,因此在path路径中也有8.0的路径,如果不将Oracle的路径加在前面,PHP会去先找8.0的目录,会认为Oracle客户端是8.0的系统,而加载失败。
Flex总结
如何把XML格式转换为ArrayCollection?首先把xml转换为XMLListCollection,然后把XMLListCollection指定为ArrayCollection的source,例如:Servlet中如何向Flex前台传送大量的数据?首先,你要知道在Flex中一切数据都是以XMl格式为中心的,所以,我们在Servlet中可以把数据生成XML文件的形式,然后以流的形式发送到前台,通过生成一个XML对象进行解析。
Flex怎样与Servlet进行交互?两种方法:A、通过HTTPServiceFlex前台----<s:HTTPService id="service"url="http://localhost:8080/flexdemo/simpleServiceServlet"></s: HTTPService>Servlet后台----如果在HTTPServic中不指出method时,servlet默认Get方式接收B、通过URLRequest例如在代码最后,callBack为回调函数。
如果我们不需要servlet中数据处理完毕后在Flex前台调用数据,UrlLoader也可以换为sendToURL(request).如何使用户无法在comboBox手动输入字符?为解决这个情况可以设置comboBox的属性focusIn=”comboBox.textInput.editable=false;”在Flex向Java后台传值时如何避免字符乱码?Flex前台:encodeURI(变量)Java后台:flex.messaging.util.URLDecoder.decode(接收的变量)读取一个完整的XML文件Flex怎样与Java进行交互?前提概要:Flex应用可以以远程对象、HTTP(或REST)服务和Web服务的方式访问数据服务。
sip错误代码
1xx = 通知性应答∙100 正在尝试∙180 正在拨打∙181 正被转接∙182 正在排队∙183 通话进展2xx = 成功应答∙200 OK∙202 被接受:用于转介3xx = 转接应答∙300 多项选择∙301 被永久迁移∙302 被暂时迁移∙305 使用代理服务器∙380 替代服务4xx = 呼叫失败∙400 呼叫不当∙401 未经授权:只供注册机构使用,代理服务器应使用代理服务器授权407∙402 要求付费(预订为将来使用)∙403 被禁止的∙404 未发现:未发现用户∙405 不允许的方法∙406 不可接受∙407 需要代理服务器授权∙408 呼叫超时:在预定时间内无法找到用户∙410 已消失:用户曾经存在,但已从此处消失∙413 呼叫实体过大∙414 呼叫URI过长∙415 不支持的媒体类型∙416 不支持的URI方案∙420 不当扩展:使用了不当SIP协议扩展,服务器无法理解该扩展∙421 需要扩展∙423 时间间隔过短∙480 暂时不可使用∙481 通话/事务不存在∙482 检测到循环∙483 跳数过多∙484 地址不全∙485 模糊不清∙486 此处太忙∙487 呼叫被终止∙488 此处不可接受∙491 呼叫待批∙493 无法解读:无法解读 S/MIME文体部分5xx = 服务器失败∙500 服务器内部错误∙501 无法实施:SIP呼叫方法在此处无法实施∙502 不当网关∙503 服务不可使用∙504 服务器超时∙505 不支持该版本:服务器不支持SIP协议的这个版本∙513 消息过长6xx = 全局失败∙600 各处均忙∙603 拒绝∙604 无处存在∙606 不可使用代码详解:SIP协议应答码应答代码应答码是包含了,并且扩展了HTTP/1.1应答码。
并不是所有的HTTP/1.1应答码都适当应用,只有在折里指出的是适当的。
其他HTTP/1.1应答码不应当使用。
并且,SIP也定义了新的应答码系列,6xx。
LTP使用说明
LTP工具说明1LTP测试套件 (3)1.1简介 (3)1.2源目录结构 (3)2LTP安装 (4)2.1下载 (4)2.2编译 (4)2.3安装说明 (5)3LTP测试套件结构说明 (6)3.1概述 (6)3.2目录介绍 (6)3.3LTP执行原理 (6)4LTP测试套件测试内容 (7)4.1LTP测试套件测试内容 (7)4.1.1commands (7)4.1.2kernel (7)4.1.3kdump (8)4.1.4network (8)4.1.5realtime (8)4.1.6open_posix_testsuite (8)4.1.7misc (8)4.2测试方法说明 (8)4.2.1commands模块内容描述及实现方法 (8)4.2.2kernel (10)4.2.3network (15)4.2.4open_posix_testsuite (17)4.2.5realtime (18)5LTP测试套件配置详细 (19)5.1networktests.sh脚本配置 (19)5.2networkstress.sh配置 (23)5.3open_posix_testsuite测试套件 (28)5.4realtime配置 (29)5.5mm脚本的配置 (30)5.6io脚本配置 (30)5.7filecaps的配置 (30)5.8tpm_tools的配置 (31)5.9tcore的配置 (31)5.10io_floppy的配置 (31)5.11io_cd 的配置 (32)5.12cpuhotplug的配置 (32)5.13adp.sh的配置 (33)5.14autofs1.sh和autofs4.sh的配置 (34)5.15exportfs.sh的配置 (34)5.16isofs.sh的配置 (34)5.17ltpdmmapper.sh的配置 (35)5.18ltpfslvm.sh的配置及要求 (36)5.19ltpfsnolvn.sh的配置及要求 (36)5.20ltp-scsi_debug.sh的配置及要求 (37)5.21sysfs.sh的配置及要求 (37)5.22rpctirpc的配置及要求 (37)5.23test_selinux.sh的配置及要求 (39)5.24smack的配置和要求 (40)5.25perfcounters的配置及要求 (41)5.26can的配置及要求 (41)5.27test_robind.sh的配置 (42)6LTP测试套件使用说明 (43)6.1概述 (43)6.2测试方法 (44)6.2.1初始测试 (44)6.2.2压力测试 (47)1LTP测试套件1.1简介LTP(Linux Test Project)是SGI、IBM、OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性、健壮性和稳定性。
FLEX常用验证控件
//创建验证控件,放在数组里
<fx:Array id="roleNameValidators">
<mx:Validator id="roleNameValidator"
source="{roleName}" property="text"
required="true" requiredFieldError="请输入角色名" />
4.批量验证
创建一个表单
<mx:Form>
<mx:FormItem label="当前部门: ">
<mx:Text id="txtDepartName" width="100"/>
</mx:FormItem>
<mx:FormItem label="*新建角色名称(至多10个汉字): ">
<mx:TextInput id="roleName" width="100%"/>
trigger="{btn}" triggerEvent="click"/>
<mx:FormItem label="姓名:">
<mx:TextInput id="nameTI"/>
</mx:FormItem>
<mx:FormItem label="年龄:">
flex4事件详解
Flex4之事件详解第一、Flex事件简介事件贯穿于Flex应用开发的全过程。
事件是ActionScript3.0中最重要的部分之一,也是Flex应用程序开发的核心基础。
本章将在DOM 3的基础上详细讲解ActionScript3.0和Flex中的事件机制。
第二、一切从事件开始利用事件处理,可以方便地响应和处理用户输入和系统事件。
Flex 事件模型不仅方便,而且符合标准,新的事件模型基于文档对象模型(DOM,Document Object Model)第3级事件规范,为Flex程序员提供了强大而直观的事件处理工具第三、事件简介什么是事件呢?我们去商店里买鞋子时,选择好鞋子后,告诉销售人员鞋子的款式、号码、付款,然后服务员将符合购买要求的鞋子交给我们。
这样就完成了一个事件的流程。
但是如何找到售货员买鞋子,售货员拿什么样的鞋子给客户,都是事件要处理的事情。
对于Flex而言,其重要的部分就是与用户进行交互。
用户的操作,例如键盘输入、鼠标点击等引起界面的响应,然后在内部进行一系列的操作,最终返回用户需求的信息。
简单的过程,即包含了事件的核心思想。
用户的操作触发了某个事件,同时产生该事件的信息,通知相关的对象进行处理。
其中,如何发起消息、传递消息是Flex非常关键的问题。
第四、DOM3事件机制DOM3的事件模型是非常简单的,符合我们日常思考的习惯。
在上一节开头所举的买鞋的例子中,买鞋的人(客户)可以看作事件发送者(Event Dispatcher),买鞋的过程可以看作事件,而销售人员即事件侦听器(Event Listener)。
买鞋可以看作事件的类型(Type)。
买鞋的个人即事件的目标(Target)DOM3事件机制包含4个部分:注册事件侦听器、发送事件、侦听事件、移除事件侦听器。
这4个部分贯穿整个事件的发生和结束。
第五、ActionScript3.0中的事件机制在Flex的事件机制中ActionScript扮演了非常重要的角色。
Bison-Flex笔记
Bison-Flex笔记Bison-Flex 笔记FLEX什么是 FLEX ,它是一个自动化工具,可以按照定义好的规则自动生成一个 C 函数 yylex() ,也成为扫描器( Scanner )。
这个 C 函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作( Action )。
例如在规则中可以这样定义:如果遇到一个换行字符 \n ,那么就把行计数器的值加一。
Flex 文件就是一个文本文件,内容包括定义好的一系列词法规则。
文件的命名习惯上以小写字母 l(L) 来作为文件后缀。
如果为了清晰,也可以用 .flx 或者 .flex 作为文件的后缀名。
Flex 文件完成后,就执行下列命令: $ flex example.flex这个命令执行后将生成一个 C 文件,默认文件名为 lex.yy.c 。
这个 C 文件主要内容就是函数 yylex() 的定义。
如果要直接将这个文件编译成为一个可执行程序,还有一些要注意的地方。
如果在 Flex 文件中没有提供 main() 函数的定义,那么这个 C 文件中不会有main() 函数。
此时单独编译这个 C 文件的时候,一定要加上 -lfl 的连接库参数;若提供了 main() 函数,就不必要提供这个连接库参数了。
连接库 libfl 提供了一个缺省的 main 函数。
缺省的 main() 函数中只是简单地调用 yyflex() 函数,而自己提供的 main() 函数则可以根据需要加入许多其他的处理代码。
Flex 文件词法规范定义文件给出了单词构成规则。
词法文件在习惯上用字母 l( 即 L 的小写 ) 来作为后缀。
Flex 文件由三个部分组成。
或者说三个段。
三个段之间用两个 %% 分隔。
定义段 (definitions)%%规则段 (rules)%%用户代码段 (user code)定义段 (definitions section)定义段包含着一些简单名字的定义 (name definitions) ,旨在简化扫描器的规范。
测试标准(中国电信研究院)
大学计算机基础实验指导教程电子版
目录实验一熟悉Visual Basic 6.0编程环境 ....................................................................... 实验二Visual Basic语句基础 ............................................................................................ 实验三顺序结构 . (23)实验四选择结构(一) ..................................................................................................... 实验五选择结构(二) ..................................................................................................... 实验六循环结构(一) ..................................................................................................... 实验七循环结构(二) ..................................................................................................... 实验八循环结构(三) ..................................................................................................... 实验九循环结构(四) ..................................................................................................... 实验十一维数组程序设计 ................................................................................................. 实验十一二维数组程序设计 ............................................................................................. 实验十二控件数组和自定义数组程序设计 ..................................................................... 实验十三过程程序设计(一) ......................................................................................... 实验十四过程程序设计(二) ......................................................................................... 实验十五窗体和常用控件(一) ..................................................................................... 实验十六窗体和常用控件(二) ..................................................................................... 实验十七窗体和常用控件(三) ..................................................................................... 实验十八用户界面设计(一) ......................................................................................... 实验十九用户界面设计(二) ......................................................................................... 实验二十用户界面设计(三) ....................................................................................... 实验二十一图形操作 .........................................................................................................实验一熟悉Visual Basic 6.0编程环境【实验目的】(1)熟悉VB集成开发环境。
大学计算机基础实验指导教程电子版
目录实验一熟悉Visual Basic 6.0编程环境 ....................................................................... 实验二Visual Basic语句基础 ............................................................................................ 实验三顺序结构 . (23)实验四选择结构(一) ..................................................................................................... 实验五选择结构(二) ..................................................................................................... 实验六循环结构(一) ..................................................................................................... 实验七循环结构(二) ..................................................................................................... 实验八循环结构(三) ..................................................................................................... 实验九循环结构(四) ..................................................................................................... 实验十一维数组程序设计 ................................................................................................. 实验十一二维数组程序设计 ............................................................................................. 实验十二控件数组和自定义数组程序设计 ..................................................................... 实验十三过程程序设计(一) ......................................................................................... 实验十四过程程序设计(二) ......................................................................................... 实验十五窗体和常用控件(一) ..................................................................................... 实验十六窗体和常用控件(二) ..................................................................................... 实验十七窗体和常用控件(三) ..................................................................................... 实验十八用户界面设计(一) ......................................................................................... 实验十九用户界面设计(二) ......................................................................................... 实验二十用户界面设计(三) ....................................................................................... 实验二十一图形操作 .........................................................................................................实验一熟悉Visual Basic 6.0编程环境【实验目的】(1)熟悉VB集成开发环境。
FLEX学习笔记(崔宏峰)0309
FLEX学习笔记贵在坚持崔二宏零峰一一年二月十七一、配flex环境需要软件:1.j dk2.t omcat3.m yeclipse4.f lex builder 插件5.b lazeds.war其它的安装比较简单。
只是装flex builder时注意。
有一步要选myeclipse的安装路径才行。
然后把D:\Program Files\adobe\Adobe Flash Builder 4 Plug-in\eclipse下的features和plugins文件夹放在myeclipse的D:\Program Files\Genuitec\Common 下(myeclipse8以后就是这种路径。
7好像是单独有一个eclipse文件夹),然后还有一个AMT文件夹放到D:\Program Files\Genuitec\MyEclipse-8.6\AMT文件夹(这个不知道是为啥)(注:也有人不拷贝这些。
只是像上边那样直接安装。
行不行有待考证)二、建立采用flex的web工程因为flex只是做为表示层展示,flex只接收java返回数据,那怎么和java服务端通信呢?这时我们需要用到adobe公司开发的一个开源项目Blazeds。
Blazeds是一个基于服务器的Java 远程控制(remoting) 和Web 消息传递(messaging) 技术,以LGPL(Lesser GNU Public License)公共许可证书发布。
它能够使得后端的Java 应用程序和运行在浏览器上的Adobe Flex 应用程序相互通信。
在Java应用服务器上,它以servlet的形式存在,因此可以在任何标准Java 网络应用中运用它。
下载好核心包解压出来就发现一个文件名是Blazeds.war,我们只需要把Blazeds.war改成Blazeds.rar然后解压就会出现:1.打开Myeclise8.0新建一个javaweb工程,选择javaEE 5.0如图2.把blazeds解压后的2个文件夹覆盖到WebRoot下面,展开发现在WEB-INF 目录下面多了flex文件夹,这个很重要主要是通信的4个配置文件。
Flex基础
Flex安装配置
解决创建的错误如下图
找到Problems看到有一个错误后肉我们右键选重新创 建HTML模板。这里错误已经解决,但是新的问题又 来了,src是java的源文件夹存java源代码的地方,但 是现在被 flex占用了
Flex安装配置
更改flex的项目源文件为flex_src,右键项目属性找到 flex构建路径的主源文件夹把src改为flex_src如下图
使用ActionScript
While和do while
while循环在循环开始前检查条件;如果循环开始条件 不成立,则不会执行 do while 在循环结束后检查条件,这就适合无论测试条 件是否 成立,都至少将部分代码运行一次。
使用ActionScript
条件语句(if和switch)
Flex安装配置
然后把src文件夹 里面的flexweb.mxml移动到flex_src 文件夹里面。最终目录如下图
(二)实现Flex与JAVA通信
实现Flex与JAVA通信
在src目录创建Java文件MyTest如下图
实现Flex与JAVA通信 配置WebRoot/WEB-INF/flex/remoting-config.xml 如下图
Flex的ActionScript支持两种主流注释形式:行内注释和多行注释 行内注释
行内注释以双斜杠开头,从双斜杠到当前行末尾之间的文本是一条 注释。换行意味着注释结束。
多行注释
如果想添加更多的注释用多行注释,多行注释的开始位置以斜杠加 星号(/*)标示。结束位置以星号加斜杠(*/)
很多时候不方便在MXML创建组件中 的定义事件,如组件是根据动 态 数据创建的,这些事件就需要使用Actionscript代码来动态的定义 事件。
flex语言
1.了解Flex在如今这个以用户为中心的时代,用户体验越来越重要,用户不仅要求应用要像C/S模式的应用那样具有良好的交互性,而且要求应用要像B/S模式的应用那样具有部署灵活和跨平台的优势。
RIA技术便是在这种需求下应运而生的,它同时具备B/S模式和C/S模式应用的双重优势,很好地满足了现代用户的需求Flex, Silverlight, JavaFx ,Html5四种语言:1. 必须支持Java作为后台语言,且能够与JSF/JSP开发的系统集成。
2. 必须有成功案例可以借鉴,成功案例多则优先考虑。
3. 有成熟的IDE,支持拖拽编程和跟踪调试。
如果能基于我们所熟悉的Eclipse集成开发环境,则会优先考虑。
能够满足这些要求的就只有FlexFlex是排版打印软件和图形渲染软件巨头Adobe公司在其著名的Flash平台(Flash Player)上,用ActionScript语言开发的一套RIA软件开发套件(SDK)及其集成开发环境。
开发人员可以将RIA程序编译成为Flash文件,为Flash Player所接受,也就是说,Flex技术所开发出来的程序对于大部分浏览者而言并不需要安装额外的客户端支持,这是一个得天独厚的优势。
2.语言及数据Flex程序以下三个文件组成:以css为后缀的样式表文件以mxml为后缀的程序文件以as为后缀的ActionScript文件2.1MxmlMXML语言是专门用于Flex程序中,描述界面表现的一种XML标记语言。
我们可以用它来管理程序的整体布局,控制组件的样式和外观,也可以构建非可视化的对象,比如XML数据,组件的数据源等。
MXML标签与ActionScript类或者类中的属性是相对应的。
当你编译你的Flex应用程序的时候,Flex解析你的MXML标签并且生成相应的ActionScript类。
然后这些ActionScript类会被编译成SWF字节码存储到一个SWF文件中。
flex函数宏详解
1.内置变量yy_create_buffer:见后面的缓冲管理yy_delete_buffer:见后面的缓冲管理yy_flex_debug:见后面的缓冲管理yy_init_buffer:见后面的缓冲管理yy_flush_buffer:见后面的缓冲管理yy_load_buffer_state:见后面的缓冲管理yy_switch_to_buffer:见后面的缓冲管理yyin: 输入缓冲流的文件指针,可以被替换以实现解析某个自定义的文件yyleng:当前匹配字串的长度yylex: 解析函数,接口yylineno:当前匹配的文件行号yyout: 输出流的指针yyrestart: 手动调用yyrestart.会重启解析yyrestart( yyin );一般是打开某个文件之后,yyrestart(yyin)再解析.yytext:当前匹配的字串yywrap:解析一个文件完毕之后,会调用yywrap:返回1表示结束,0表示继续(此时最好重新打开yyin或者重置yyin流)2. 几个重要函数:1). yymore(): yymore()的含义是,当当前匹配的字串之后,想把后面配置的字串附加到这个字串后面,组成新的token返回.比如:%%mega- ECHO; yymore();kludge ECHO;如果:“mega-kludge" the following will write "mega-mega-kludge" to the output。
为什么呢?首先遇到 mega-,接着被more了一下,因此就会把kludga附加到mega-后面,而后面的kludge的动作又是打印,因此会打印出:mega-mega-kludge2). yyless(): yyless()的含义是:当当前的匹配之后,我想只返回前面几个字符,并且把后面回退到输入比如:%%foobar ECHO; yyless(3);[a-z]+ ECHO;input "foobar" the following will write out "foobarbar": 为什么呢? foobar输入之后,匹配foobar,ECHO打印出来,接着yyless(3),则输入流变为bar了(yytext为foo).接着再匹配,于是匹配到[a-z]+,因此再次打印出bar.3).BEGIN: flex下一个起始解析状态。
uniapp在移动端软键盘监听(弹出,收起),及影响定位布局的问题
uniapp在移动端软键盘监听(弹出,收起),及影响定位布局的问题问题:通过绝对定位或者固定定位设置底部按钮,在虚拟键盘弹起时,底部按钮会被顶到虚拟键盘上⽅。
⽅法⼀:最简单的,给按钮使⽤相对定位,单按钮肯定⽆法固定在屏幕底部了,没⼈挑⽑病就可凑合⽤。
⽅法⼆:还是绝对定位或固定定位,给输⼊框来个监听,@focus聚焦则隐藏按钮,@blur失焦则显⽰按钮。
但是安卓⼿机,键盘收起时输⼊框不会⽴刻失焦,键盘完全收起后过⼏秒才失焦,有个时间差,这⽅法就不完美。
⽅法三:监听键盘的⾼度,uniapp⾥⾯提供了uni.onKeyboardHeightChange监听键盘⾼度的⽅法,在页⾯加载的时候创建监听器。
如果把监听器放在@blur上,第⼀次失焦还是会有时间差的。
这办法在页⾯显⽰上还是很完美的,but还是会有问题,根据uniapp社区⾥有⼈反馈,onKeyboardHeightChange这个监听器在页⾯退出的时候不会销毁,重新进⼊页⾯的时候还会再创建⼀个新的监听器,直到应⽤退出才销毁。
好像说把hbuilder版本升级后这个bug会解决。
配置app-plus{softinputMode: adjustResize}20210322更新:最近做的项⽬⼜碰到了这个问题,uniapp开发的app应⽤。
⽬前安卓机和苹果机没发现底部按钮会定位失效的情况。
具体怎么解决的真有点忘记了,把⽬前可能有关的地⽅贴出来:1、pages.json的页⾯配置"app-plus": {"softinputMode": "adjustPan"}2、页⾯上输⼊框位置属性position: relative;按钮位置属性position: absolute;输⼊框加上adjust-position属性<input type="text" :adjust-position="false"/>关于产⽣问题的原因:苹果⼿机在键盘弹起后,页⾯应该会重新计算下?导致绝对定位/相对定位的按钮重新去计算bottom的位置。
Flutter输入框TextField属性及监听事件介绍
Flutter输⼊框TextField属性及监听事件介绍textField⽤于⽂本输⼊,它提供了很多属性:const TextField({...TextEditingController controller,FocusNode focusNode,InputDecoration decoration = const InputDecoration(),TextInputType keyboardType,TextInputAction textInputAction,TextStyle style,TextAlign textAlign = TextAlign.start,bool autofocus = false,bool obscureText = false,int maxLines = 1,int maxLength,this.maxLengthEnforcement,ToolbarOptions? toolbarOptions,ValueChanged<String> onChanged,VoidCallback onEditingComplete,ValueChanged<String> onSubmitted,List<TextInputFormatter> inputFormatters,bool enabled,this.cursorWidth = 2.0,this.cursorRadius,this.cursorColor,this.onTap,...})属性类型说明controller TextEditingController控制器,通过它可以获取⽂本内容,监听编辑⽂本事件,⼤多数情况下我们需要主动提供⼀个控制器focusNode InputDecoration焦点控制decoration InputDecoration⽤于控制⽂本的外观,如提⽰⽂本、背景⾊、边框等keyboardType TextInputType⽤于设置输⼊框的默认键盘类型textInputAction TextInputAction键盘动作图标按钮,他是⼀个枚举值style TextStyle正在编辑的⽂本样式textAlign TextAlign⽂本框的在⽔平⽅向的对齐⽅式autofocus bool是否⾃动获取焦点obscureText bool是否隐藏正在编辑的⽂本,⽤于密码输⼊场景maxLines int输⼊框的最⼤⾏数maxlength int⽂本框的最⼤长度maxLengthEnforcement当⽂本长度超出⽂本框长度时如何处理toolbarOptions ToolbarOptions长按时出现的选项onChange ValueChanged<String>输⼊框改变时候的回调函数,也可以通过controller来监听onEditingComplete VoidCallback输⼊完后触发的回调函数,不接受参数onSubmitted ValueChanged<String>接收ValueChanged<String>的参数inputFormatters List<TextInputFormatter>⽤于指定输⼊格式,可以⽤于检验格式enable bool为bool时,输⼊框将变为禁⽤状态cursorWidth、cursorRadius和cursorColor这三个属性是⽤于⾃定义输⼊框光标宽度、圆⾓和颜⾊⽰例:注意提⽰内容都是在InputDecoration中设置的void mian()=>runApp(MyApp());class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(title: "⽂本输出框",home:Scaffold(appBar: AppBar(title:const Text("⽂本输⼊框")),body:Column(children:const <Widget>[TextField(autofocus: true,decoration: InputDecoration(//⽂本labelText:"⽤户名",//提⽰信息hintText: "⽤户名或邮箱",//图标prefixIcon: Icon(Icons.person),),//设置最⼤⾏数maxLines: 1,),TextField(autofocus: true,decoration: InputDecoration(labelText:"密码",hintText: "您的登录密码",prefixIcon: Icon(Icons.lock),),//隐藏⽂本obscureText: true,),],),));}}监听事件:获取内容的两种⽅式:定义两个变量,⽤于保存⽤户名和密码,然后再onChanged触发时,各⾃保存输⼊内容通过Controller直接获取,onChanged是⼀种单纯的监听改变事件,但Controller中还有⼀些其他⽅法可以使⽤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Flex4.6事件监听机制的测试和总结在Flex和Actionscript3中,事件的类型有很多,比如单击的click、鼠标移动的mouseEvent、改变大小等。
开发人员需要注意的是,某个组件如何设置监听、发出事件,以及事件的响应操作。
这种方式被称之为“事件驱动”方式。
事件驱动涉及到的有关概念包括:1、事件对象,即event object。
所有的事件对象都是flash.events.Event或者其子类。
每个事件对象都包含事件类型(type)和事件源(target),便于event listener知道事件的类型以及事件发出者。
事件对象是Event类或者某个子类的实例,不但存储了有关特定事件的信息,还包括便于操作事件对象的方法。
2、事件源,即event dispatchers。
是事件发起的主体,所有的dispatcher都是eventdispatcher或其子类。
3、事件监听器,即event listeners。
它表现为一个函数,当事件发生时,事件源dispatcher通知该监听器去处理特定的事件。
为对象添加监听器的方法是:addEventListener(type, function)。
当指定类型的事件发生时,事件监听器以事件对象eventObject为参数传递给事件响应函数。
同一时刻同一组件可能有多个事件发生,因此这里指定事件类型是非常有必要的。
4、事件流,当一个组件触发事件时,这个事件会沿着一定的顺序流动,每经过一个组件,就会检测这个组件是否注册了该事件类型的监听器,如果注册了,就会响应,并调用事件处理函数。
事件流分为三个阶段:(1)捕获阶段,Flex应用程序从根显示元素(如Application)逐层向下寻找,直到找到事件产生的源头。
(2)目标匹配阶段,在该阶段,Flex应用程序会调用目标对象自身注册的监听程序。
(3)冒泡阶段,在该阶段,从目标节点到根节点,逐层向上检测每个节点是否注册了监听器,相当于捕获阶段的逆过程。
Flex应用程序可以在addEventListener()函数中的第三个参数设置事件获取的阶段,如果为true,则关闭捕获阶段,开启目标匹配和冒泡阶段。
如果要阻断事件流继续流动,可以在监听器的响应函数中添加:event.stopPropagation();由于Flex设置的监听事件类型比较少,如果需要设置组件的特殊响应事件,或者为自定义组件添加自定义的响应事件,我们需要设计自定义类型的Event对象。
下面我们以一个由button和textInput控件组成的自定义组件InputButtonComp为例,为该组件设置按钮单击时的响应事件。
第一步:设计自定义组件。
(1)新建InputButtonComp.as类文件,继承自BorderContainer容器,并定义自定义组件中需要包含的控件。
public class InputButtonComp extends BorderContainer {private var textInput:TextInput;private var button:Button;private var group:HGroup;(2)在InputButtonComp组件中添加子控件,重写createChildren方法。
//添加子组件,并指定初始状态override protected function createChildren():void{ super.createChildren();if(!group){group = new HGroup();group.percentWidth = 100;group.percentHeight = 100;}if(!textInput){textInput = new TextInput();textInput.percentWidth=75;textInput.percentHeight=100;textInput.editable = true;}if(!button){button = new Button();bel = _btnLabel;button.percentWidth = 25;button.percentHeight = 100;//注册监听器,响应单击事件和键盘进入事件button.addEventListener("click",buttonClickHandle);button.addEventListener(KeyboardEvent.KEY_DOWN,buttonEnterHandle);//回车键响应}addElement(group);group.addElement(textInput);group.addElement(button);}(3)自定义组件样式设置//提交组件的变化override protected function commitProperties():void{ mitProperties();invalidateDisplayList();}//默认宽度和长度override protected function measure():void{super.measure();}override protected functionupdateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void{super.updateDisplayList(unscaledWidth,unscaledHeight);//button.move(textInput.width,0);}(4)设置按钮的监听器,我们设置在监听器中能分发出一个自定义的事件InputButtonCompEvent到事件流中,自定义事件的类型是“buttonClick”,传递的参数是我们的输入内容textInput.text。
//分发按钮单击响应事件private function buttonClickHandle(event:Event):void{ this.dispatchEvent(newInputButtonCompEvent("buttonClick",textInput.text));}//分发按钮回车键提交响应事件private functionbuttonEnterHandle(event:KeyboardEvent):void{if(event.charCode == 13){this.dispatchEvent(newInputButtonCompEvent("buttonClick",textInput.text));}}这一步涉及到自定义组件设计的相关内容,这一方面我们不在此做过多叙述。
在这一步当中,我们做的工作主要是把自定义的组件搭建好,并为其中的子组件设置并注册了监听器。
其中的监听器能分发出我们自定义的事件InputButtonCompEvent到事件流中。
那么接下来,我们就要设计这个自定义事件的内部细节了。
二、自定义事件的设计我们需要在InputButtonCompEvent.as文件中创建一个自定义的事件类。
所有事件对象都是flash.events.Event或其子类,因此自定义事件类需要继承自Event类:public class InputButtonCompEvent extends Event {然后我们的构造函数决定了自定义事件具有的参数列表形式,比如:public functionInputButtonCompEvent(type:String,eventInfo:Object=null,bubbles :Boolean=false,cancelable:Boolean=false){super(type,bubbles,cancelable);this.eventInfo = eventInfo;}Event类具有三个参数:type,事件类型、bubbles ,Event 对象是否参与事件流的冒泡阶段。
默认值为false、cancelable,确定是否可以取消Event 对象。
默认值为false。
我们在此基础上添加了一个参数eventInfo:Object,用于事件之间的参数传递,并定义该参数的获取和赋值方法:public function get eventInfo():Object{return _eventInfo;}public function set eventInfo(value:Object):void{_eventInfo = value;}三、初步测试到这里,我们的自定义组件和它的自定义响应事件已经建立起来了,也许此时你兴致勃勃的打算欣赏自己的杰作,于是你把自定义组件项目生成的库文件InputButtonComponent.swc拷贝到你的项目中的libs目录下,在设计模式下从自定义组件中找到我们的组件InputButtonComp,拖入我们的工作界面,大概是这么个样子:一切正常吧,你很满意。
然后设置组件的buttonClick事件响应函数:这是开始出现问题了,在Flex-Builder编辑器底端提示错误:这里为什么出错了呢?回想一下在设置自定义事件的buttonClick类型时,我们只是在分发自定义事件到事件流时,定义了事件类型为buttonClick://分发按钮单击响应事件private function buttonClickHandle(event:Event):void{ this.dispatchEvent(newInputButtonCompEvent("buttonClick",textInput.text));}但是系统怎么识别这个类型呢?换句话说,自定义组件是怎么知道这个是它要去响应的事件呢?四、修改测试Flex中专门为事件定义了一个[Event]元标签,用来申明被自定义组件分派的事件。
这就需要我们在自定义组件的时候,要对这个事件类型及其对应的事件进行申明:.....}事件类型申明放在package申明的后面,类的前面:package componentsBorderContainer { .....}}上述的标签[Event]属于元数据标签,在代码中的作用是向编译器提供如何编译程序的信息,而不会被编译到生成的swf/swc文件中。
为元数据标签定义的name属于自定义组件的事件属性名,在自定义组件中使用name可获取类型为type的自定义事件,并在应用程序中设置其处理函数。
这个时候错误消失了,整个环节都已经搭建好。