加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex里的this

发布时间:2020-12-15 04:02:18 所属栏目:百科 来源:网络整理
导读:为了便于对比和叙述,我们先上一段最简单的 js+html 代码: input? type ="button" ?value ="test" ?id ="htmBtn" ?onclick ="alert(this.id)" 用惯 js+html 的程序员都知道,这里的 this 指向触发事件的 html 组件本身,所以 this.id 将如愿显示为 ”htmBtn

为了便于对比和叙述,我们先上一段最简单的js+html代码:

< input? type ="button" ?value ="test" ?id ="htmBtn" ?onclick ="alert(this.id)" >

用惯js+html的程序员都知道,这里的this指向触发事件的html组件本身,所以this.id将如愿显示为”htmBtn”

但是在flex3中,你写事件侦听函数时,this关键字将指向application,而不再指向触发事件本身的组件上了(与js+html完全不同):

例如:


mx:ComboBox? name ="ttt" ??change ="Alert.show('you?have?change?the?data!'+this.selectedLabel)" >
mx:dataProvider mx:String >Dogs </ >Cats >Mice mx:ComboBox >

中的this.selectedLabel将找不到任何东东。因为this并没有指向这个combobox!!!

那么怎么找到触发事件的组件呢?flex提供了event.currentTarget来指定触发事件的当前组件,如下方式:


="Alert.show('you?have?change?the?data!'+event.currentTarget.selectedLabel)" >

或者:


mx:Script > <![CDATA[
private?function?changeEvt(e:Event):void?{
Alert.show('you?have?change?the?data!'+e.currentTarget.selectedLabel)"
}
]]> >

="changeEvt(event)" >< >

?

官方文档还提出了特别说明,使用event.currentTarget时有一个好习惯可以参考,即,最好先指定好该组件的类型,例如TextInput(e.currentTarget),这样做的目的是防止由于该组件某个属性不存在时,编译时不报错而运行时才报错,看代码就明白了:


<? xml?version="1.0" ?>

mx:Application? xmlns:mx ="http://www.adobe.com/2006/mxml"

import?mx.core.UIComponent;

private?function?tiHandler(e:Event):void?{

/*?
这段代码将会在运行时报错,而编译时不报错。因为TextInput根本没有tmesis属性
e.currentTarget.tmesis?=?4;
*/

/*
这段代码的用法,就能在编译时便发现错误,不用等到运行时才报错
TextInput(e.currentTarget).tmesis?=?4;
*/

}

mx:TextInput? id ="ti1" ?click ="tiHandler(event)"

text
="This?is?some?text.?When?you?click?on?this?control,?the?first?three?characters

are?selected."
/>

mx:Application >

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读