22.1.创建一个运行时共享库

22.1.1.问题
我想创建一个可被下载和缓存的运行时共享库(RSL) .
22.1.2.解决办法
使用自定义类,组件和其他资源创建一个库,编译为SWC文件,然后解压出SWF文件中的library.swf 文件,引入到你的应用程序部署目录,作为一个RSL使用。
22.1.3.讨论
SWC文件是一种压缩文件格式,里面包含一个library.swf 文件一个catalog.xml文件。这个库是一组编译进swf文件的资源,而catalog.xml是描述依赖关系。要使用这个库作为RSL,你需要从生成的SWF文件中解压缩出library.swf,引入到你的应用程序目录中。

虽然在应用程序同一个域中需要有个库才能在运行时访问它,但是在编译应用程序时这个SWF库文件是不需要的,而SWC文件在编译时是必须的,因为它使用了动态链接。

下面的例子是一个MXML组件,被打包进SWC文件,这个类被引入到生成的SWF库文件中,而类实例将显示在应用程序的显示列表中:
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="300height="200">
<mx:Metadata>
[Event(name="submit", type="flash.events.Event")]
</mx:Metadata>
<mx:Script>
<![CDATA[
public static const SUBMIT:String = "submit" ;
private function clickHandler():void {
dispatchEvent( new Event( CustomEntryForm.SUBMIT ) );
}
public function get firstName():String { return firstNameField.text; }
public function get lastName():String { return lastNameField.text; }

]]>
</mx:Script>
<mx:Form>
<mx:FormItem label="First Name:">
<mx:TextInput id="firstNameField" />
</mx:FormItem>
<mx:FormItem label="Last Name:">
<mx:TextInput id="lastNameField" />
</mx:FormItem>
<mx:Button label="submitclick="clickHandler();" />
</mx:Form>
</mx:Canvas>

这是个简单的组件,允许用户输入信息和发出一个submit事件。要打包这个类为SWC文件。

你需要调用compc工具,设置source-path和include-classes 参数,如下面的命令生成一个CustomLibrary.swc:
compc –source-path . –include-classes com.oreilly.flexcookbook.CustomEntryForm -output
CustomLibrary.swc


这个MXML组件CustomEntryForm.mxml存放在当前开发目录下的com/oreilly/flexcookbook子目录下,source path输入值为当前目录(一个点号)。你可以引入多个类文件,之间用空格分开。

打包进生成的SWF文件的library.swf文件被用来作为RSL,要解压出这个文件,你可以使用标准的unzip工具。当编译应用程序时SWC文件作为动态链接,你可以根据需要重命名解压出来的library文件。在这个例子中,被命名为CustomLibrary.swf。

下面的例子使用载入RSL中的CustomEntryForm组件:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:flexcookbook="com.oreilly.flexcookbook.*layout="vertical">

<mx:Script>
<![CDATA[
private function onFormSubmit():void {
greetingField.text = "Hello " + entryForm.firstName + " " + entryForm.lastName;
}

]]>
</mx:Script>
<mx:Panel title="Enter Name:width="400height="400">
<flexcookbook:CustomEntryForm id="entryForm"
submit="onFormSubmit()" />

<mx:HRule width="100%" />
<mx:Label id="greetingField" />
</mx:Panel>
</mx:Application>

使用来自RSL中的类引用和MXML组件资源就像引用静态链接库和本地开发目录中的类文件一样。在这个例子中在<mx:Application>标签中申明了flexcookbook名称空间,被用来添加CustomEntryForm组件到显示列表中。

要编译使用了RSL的应用程序,调用mxmlc工具时要使用external-library和runtime-sharedlibraries参数:
> mxmlc –external-library=CustomLibrary.swc –runtime-shared-libraries=CustomLibrary.swf
RSLExample.mxml

这个命令中,CustomLibrary.swc 被用来做编译时期链接检测,而RSL库被生成的SWF应用程序所调用。在开发期间,你可以把RSLExample.swf和CustomLibrary.swf 放到服务器的同一个目录下,在启动时,应用程序载入CustomLibrary RSL,当代码可用时会出现一个表单供用户输入信息。

加支付宝好友偷能量挖...


评论(0)网络
阅读(72)喜欢(0)flash/flex/fcs/AIR