首先,我们来探讨一下在编写Flex应用时,如何在MXML文件中用MXML语言表示ActionScript类的对象。我们都知道,Flex SDK类库是用ActionScript开发的,而在开发人机界面时,开发者则使用MXML来对Flex SDK中提供的ActionScript组件进行组织和布局。在MXML文件的根元素标记中,用xmlns属性来定义该MXML文件中使用的命名空间。默认情况下,Flex SDK中ActionScript的命名空间定义如下:
- xmlns:mx="http://www.adobe.com/2006/mxml"
其中mx是命名空间的缩写前缀(命名空间的前缀可以随意指定),“http://www.adobe.com/2006/mxml”表示命名空间的URL。在MXML文件中,可以用<mx:ActionScriptClassName >来引用Flex SDK中的ActionScript类,如下面的代码所示。
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application
- xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
- <mx:Button x="81" y="64" label="点击我" width="85" height="25" />
- ......
- </mx:Application>
当然,如果不喜欢用mx作为前缀,可将其改为lx,下面的代码也是合法的。
- <?xml version="1.0" encoding="utf-8"?>
- <lx:Application
- xmlns:lx="http://www.adobe.com/2006/mxml" layout="absolute" >
- <lx:Button x="81" y="64" label="点击我" width="85" height="25" />
- ......
- </lx:Application>
当然,这里只是为了说明问题才进行这样的修改,建议读者不要更改Flex SDK中ActionScript类的命名空间的默认前缀。
其实,在Flex中可以用MXML表示任何ActionScript类的对象,包括我们自定义的ActionScript类,只要指定正确的命名空间即可。有两种合法方式可以指定自定义ActionScript类的命名空间。
使用类的包名作为ActionScript类的命名空间
如代码清单2-1所示:
代码清单2-1 使用类的包名作为ActionScript类的命名空间
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application
- xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
- xmlns:xdf="com.xdfsoft.right.control.*" >
- <xdf:UIActions>
- <xdf:Action opreationCode="add" />
- <xdf:Action opreationCode="delete" />
- </xdf:UIActions>
- <mx:Button x="81" y="64" label="点击我" width="85" height="25" />
- ......
- </mx:Application>
使用包名作为命名空间的局限性是无法用一个命名空间表示多个包中的ActionScript类,从而也无法使用相同的命名空间前缀,这对开发者来说并不方便。
使用自定义的命名空间编译组件
这种方式用于生成SWC库文件的Flex库(Libary)工程,就是写一个xml文件,称之为Manifest文件,在该文件中列出映射到自定义命名空间中的类,然后在编译SWC库工程时将自定义命名空间和这个XML文件绑定在一起,这样编译器就将Manifest文件中所列举类的命名空间指定为自定义的命名空间。
Manifest文件的格式如下所示:
- <?xml version="1.0"?>
- <componentPackage>
- <component id="BoringButton" class="boring.MyButton"/>
- <component id="GreatButton" class="great.MyButton"/>
- </componentPackage>
Manifest文件非常简单,它就是Flex库工程中需要映射到自定义命名空间中的类列表,
在笔者开发的一个权限管理平台的SWC库工程中有一个名为mainfiles.xml的Manifest文件,如代码清单2-2所示。
代码清单2-2 mainfiles.xml
- <?xml version="1.0"?>
- <componentPackage>
- <component id="AccountComboBox" class="com.xdfsoft.
right.view.AccountComboBox"/>- <component id="RoleComboBox" class="com.xdfsoft.
right.view.RoleComboBox"/>- <component id="Action" class="com.xdfsoft.right.
control.Action"/>- <component id="UIActions" class="com.xdfsoft.
right.control.UIActions"/>- </componentPackage>
正确编写Manifest文件之后,我们要做的就是在编译Flex库工程时将其与自定义命名空间绑定在一起,通过设置Flex库工程的编译选项可以完成这项工作,如图2-1所示。
在Nampespace URL中设置ActionScript类库的命名空间URL字符串,这里是http://www.xdfsoft.com,然后指定映射到这个命名空间中的Manifest文件的路径,这里是com\mainfiles.xml。通过这样的设置,就可以在MXML文件中以http://www.xdfsoft.com作为命名空间的URL来引入映射到该空间中的所有类,如代码清单2-3所示。
代码清单2-3 使用自定义命名空间中的组件
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application layout="absolute" xmlns:mx="
http://www.adobe.com/2006/mxml"- xmlns:xdf="http://www.xdfsoft.com" >
- <xdf:UIActions>
- <xdf:Action opreationCode="add" />
- <xdf:Action opreationCode="delete" />
- </xdf:UIActions>
- <mx:Button x="81" y="64" label="点击我" width="85"
height="25" fontSize="13" />- </mx:Application>
(点击查看大图)图2-1 在编译选项中设置命名空间和Manifest |
使用Manifest文件建立命名空间的优点在于多个包中的类可以被映射到一个命名空间中,局限在于这种方法只能用于生成SWC的Flex 库工程,普通的Flex工程(Flex Project)不能使用这种方法建立工程中的类与命名空间的映射。
注:本文转载:http://book.51cto.com/art/201006/208230.htm
-------------------------------------------