您现在的位置: 365建站网 > 365文章 > Flex中的内部类

Flex中的内部类

文章来源:365jz.com     点击数:718    更新时间:2009-10-26 09:27   参与评论

      内部指的是在一个的内部在声明一个的定,只情况在java中是非常常象,有的候,这种用法用起来非常的方便。但是当你再在ActionScript中,定一个内部候,就会提示编译错误的定不能嵌套就郁了,莫非真的就不能实现?有一方法可回避问题

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

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

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">

       <mx:Component>

              <mx:HBox>

                     <mx:TextInput width="200"/>

                     <mx:Button label="OK"/>

              </mx:HBox>

       </mx:Component>

</mx:Canvas>

 

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

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">

       <mx:Component className="MyInput">

              <mx:HBox>

                     <mx:Script>

                            <![CDATA[

                                   import mx.managers.PopUpManager;

                                  

                                   public var text:String = "test property";

                                   private function onClick():void

                                   {

                                          text = txt.text;

                                          PopUpManager.removePopUp(this);

                                         

                                   }

                            ]]>

                     </mx:Script>

                     <mx:TextInput id="txt" width="200"/>

                     <mx:Button label="OK" click="onClick()"/>

              </mx:HBox>

       </mx:Component>

       <mx:Script>

              <![CDATA[

                     import mx.managers.PopUpManager;

                     import mx.core.Application;

                     import mx.core.UIComponent;

                    

                     private var mi:MyInput = null;

                     private function onClick():void

                     {

                            mi = PopUpManager.createPopUp(UIComponent(Application.application),MyInput,true) as MyInput;

                            PopUpManager.centerPopUp(mi);

                            lb.text = mi.text;

                     }

              ]]>

       </mx:Script>

       <mx:Button label="show popup" click="onClick()"/>

       <mx:Label id="lb" width="353" y="30" height="27"/>

</mx:Canvas>

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

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

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

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

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (718人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号