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

Flex中的内部类

发布时间:2020-12-15 04:41:46 所属栏目:百科 来源:网络整理
导读:?? 内部 类指的是在一个类的内部在声明一个类的定义,只种情况在java中是非常常见的现象,有的时候,这种用法用起来非常的方便。但是当你再在ActionScript类中,定义一个内部类的时候,就会提示编译错误:“类的定义不能够嵌套”。这就郁闷了,莫非真的就不
?? 内部类指的是在一个类的内部在声明一个类的定义,只种情况在java中是非常常见的现象,有的时候,这种用法用起来非常的方便。但是当你再在ActionScript类中,定义一个内部类的时候,就会提示编译错误:“类的定义不能够嵌套”。这就郁闷了,莫非真的就不能实现了吗?有一种方法可回避这个问题。

????? ActionScript类有两种形式,一种是扩展名为as的,这种类的写法和java非常相似。另外一种是以mxml为扩展名的文件,这种类是以xml文件格式书写的类,其中也可以嵌套as代码。两种文件在Flex中的作用是相同的都代表一个类。在as代码中定义内部类是行不通的,前面已经说明了。只好把眼光放到mxml类型的类中了。在xmxl的标签中,flex提供了一个<mx:Component>标签,这种标签只适用于mxml文件中,用来内联渲染器,多用于DataGrild控件用来功能扩展。<mx:Component>标签有两个属性id和className,id属性属性可以指定一个内嵌组件标识符,以便您可以使用作为数据绑定时数据源的表达式。 className属性指定内嵌组件的类名称,也就是相当于内部类的类名了。这就好办了,既然AS类中不可以有内部类,但是mxml类中可以嵌入组件,组件也是类那就是内部类了。

????? 接下来就可以这样这样做,定义一个mxml组件,该组件可以继承与任意一个可视组件。例如可以继承于Canvas类,创建完毕加入<mx:Component>标签,代码如下所示:

[xhtml] view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>?
  2. ?
  3. <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">?
  4. ?????? <mx:Component>?
  5. ????????????? <mx:HBox>?
  6. ???????????????????? <mx:TextInput width="200"/>?
  7. ???????????????????? <mx:Button label="OK"/>?
  8. ????????????? </mx:HBox>?
  9. ?????? </mx:Component>?
  10. </mx:Canvas>?
?

我们声明了一个内嵌组件,这个组件继承与VBox类,在这个组件中还添加了一个文本框和一个按钮。这个内嵌组件可以有自己的AS代码这些代码和外部类的代码是没有冲突的。如下所示:

[c-sharp] view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>?
  2. ?
  3. <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">?
  4. ?????? <mx:Component className="MyInput">?
  5. ????????????? <mx:HBox>?
  6. ???????????????????? <mx:Script>?
  7. ??????????????????????????? <!--[CDATA[?
  8. ?????????????????????????????????? import mx.managers.PopUpManager;?
  9. ?????????????????????????????????? public var text:String = "test property";?
  10. ?????????????????????????????????? private function onClick():void?
  11. ?????????????????????????????????? {?
  12. ????????????????????????????????????????? text = txt.text;?
  13. ????????????????????????????????????????? PopUpManager.removePopUp(this);?
  14. ?????????????????????????????????? }?
  15. ??????????????????????????? ]]>?
  16. ???????????????????? </mx:Script>?
  17. ???????????????????? <mx:TextInput id="txt" width="200"/>?
  18. ???????????????????? <mx:Button label="OK" click="onClick()"/>?
  19. ????????????? </mx:HBox>?
  20. ?????? </mx:Component>?
  21. ?????? <mx:Script>?
  22. ????????????? <![CDATA[?
  23. ???????????????????? import mx.managers.PopUpManager;?
  24. ???????????????????? import mx.core.Application;?
  25. ???????????????????? import mx.core.UIComponent;?
  26. ???????????????????? private var mi:MyInput = null;??
  27. ???????????????????? private function onClick():void?
  28. ???????????????????? {?
  29. ??????????????????????????? mi = PopUpManager.createPopUp(UIComponent(Application.application),MyInput,true) as MyInput;?
  30. ??????????????????????????? PopUpManager.centerPopUp(mi);?
  31. ??????????????????????????? lb.text = mi.text;?
  32. ???????????????????? }?
  33. ????????????? ]]-->?
  34. ?????? </mx:Script>?
  35. ?????? <mx:Button label="show popup" click="onClick()"/>?
  36. ?????? <mx:Label id="lb" width="353" y="30" height="27"/>?
  37. </mx:Canvas>?

在上面这个例子中,内嵌组件完全可以当成是一个内部类来使用,可以创建对象,可以访问该对象的方法和属性。当使用内部类的时候需要注意以下几点:

1、内嵌组件有一个关键字“outerDocument”用来访问外部类的公共属性和方法,但是仅限于内嵌组件用于item renderer 或者 item editor的时候。以上这种用法,是不可以使用outerDocument关键字的。

2、在写内嵌组件的时候,FlexBuilder很有可能没有语法提示,没关系,只要按照上面例子的格式,不用理它继续写就可以了。

3、这是我遇到的一个问题,内嵌控件最好定义在文件的上部,当外部控件的AS代码写得多了以后,可能会出现找不到内嵌控件这个类的编译错误。这个确实很奇怪,注意一下就可以了。

?

转自:http://www.voidcn.com/article/p-bfceihxj-bma.html

(编辑:李大同)

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

    推荐文章
      热点阅读