介绍
许多Flex程序使用外部资源,例如图片,声音,以及字体。尽管你可以在运行时引用和加载资源,但通常情况下你会将资源编译进程序。这个将一个资源编译进程序的过程被叫做“植入资源”。Flex可以让你将图片文件、影片文件、MP3文件,以及TrueType字体植入应用程序。
 
关于植入资源
当你植入一个资源,你将它编译进你程序的SWF文件。植入资源的好处是资源被包含在SWF文件中,可以比在运行时从远程加载资源的方法提供更快的访问。缺点是,自如资源会使SWF文件比在运行时加载资源的方式体积更大。
 
植入资源的例子
一个最普遍的对于植入机制的使用是通过在MXML标记中使用@Embed()指令为一个Flex空间引入一个图片。例如,很多控件都支持图标或皮肤。Button空间可以让你定义标签文本和可选的图标,如下所示:
<?xml version="1.0"?>
<!-- embed\ButtonIcon.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Button label="Icon Button" icon="@Embed(source='logo.gif')"/>
</mx:Application>
 
另一个可选的植入方法是关联到一个使用[Embed]元数据标签的变量。你可以在程序中的多个地方引用被植入的图片,如下所示:
<?xml version="1.0"?>
<!-- embed\ButtonIconClass.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Embed(source="logo.gif")]
[Bindable]
public var imgCls:Class;
]]>
</mx:Script>
<mx:Button label="Icon Button 1" icon="{imgCls}"/>
<mx:Button label="Icon Button 2" icon="{imgCls}"/>
</mx:Application>
 
对于样式属性,你可以使用Embed()指令将资源作为样式表定义的一部分植入。例如,你可以通过使用overSkin,upSkin和downSkin样式属性设置一个Button控件的皮肤,如下所示:
<?xml version="1.0"?>
<!-- embed\ButtonIconCSS.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Style>
.myCustomButton {
overSkin:Embed(source="overIconImage.gif");
upSkin:Embed(source="upIconImage.gif");
downSkin:Embed(source="downIconImage.gif");
}
</mx:Style>
<mx:Button label="Icon Button Style Def" styleName="myCustomButton"/>
</mx:Application>
 
注意:等号(=)在样式表中是一个Flex表达式,它也许不会被所有的CSS处理器支持。如果你发现它不被支持,可以使用Embed(filename)语法。
 
在运行时访问资源
在植入资源以外的选择是在运行时加载资源。你可以在SWF运行时从远程文件系统加载资源,或者你可典型的通过一个HTTP请求访问一个远程资源。
 
植入资源会立即加载,因为那些资源已经是SWF文件的一部分。无论如何,它们都会增加程序文件的尺寸,并且会减慢程序的初始化过程。每当资源发生变化,同样需要重新编译程序。
 
在运行时被加载的资源就像在web服务器上独立的且互不相关的文件,不会被编译进Flex程序。被引用的资源不会增加程序的初始化加载时间。不过,当你使用并加载资源时,你可能会感到一些延迟。这些资源独立于你的程序存在,所以只要资源名没有变化,你可以改变资源,而不需要重新编译。
 
为了安全,默认情况下Flex播放器不允许程序在运行时访问保存应用程序的域之外的域的一些远程数据类型,例如SWF文件。因此,一个服务器的主机数据必须处于为程序服务的主机相同的域中,或者服务器必须定义一个crossdomain.xml文件。一个crossdomain.xml文件是一个为服务器指明哪些数据和文档可以为特定域或全部域服务的XML文件。
 
在程序中绑定资源(一)_Flex
 
植入资源的语法
你用于植入资源的语法取决于你要在程序的哪个地方植入资源。Flex支持下列语法:
[Embed(parameter1, paramater2, ...)] 元数据标签
你可以在一个ActionScript文件或一个<mx:Script>块中植入一个资源。
@Embed(parameter1, paramater2, ...)指令
你使用这个语法在MXML标签定义中植入资源。
Embed(parameter1, paramater2, ...)指令
你使用这个语法在<mx:Style>块中植入资源。
 
转义@字符
你可以使用\来转义一个@字符。例如,"\@Embed(foo)"意味着字面量串"@Embed(foo)","\\@"意味着字面量串"\@"。
 
植入参数
每种植入语法由一个或多个可选的参数构成。一些参数被所有类型的语法使用,而另外一些则为特定的语法服务。例如,你可以在任何类型的语法中使用source和mimeType参数,但是scaleGridRight参数值对图片有效。
 
下表描述了在所有植入语法间通用的参数:
 参数 定义 
 source 定义了要植入的资源的名称和路径,可以是绝对路径或相对于包含植入语句的文件的路径。被植入的资源必须是一个保存在本地的资源,因此你不能为被植入的的资源定义一个URL。 
 mimeType  定义资源的mime类型
 
下表描述了只为图片和Sprite对象定义的参数:
 参数 定义 
scaleGridTop  Specifies the distance in pixels of the upper dividing line from the top of the p_w_picpath in a 9-slice scaling formatting system. The distance is relative to the original, unscaled size of the p_w_picpath
scaleGridBotom  Specifies the distance in pixels of the lower dividing line from the top of the p_w_picpath in a 9-slice scaling formatting system. The distance is relative to the original, unscaled size of the p_w_picpath.
scaleGridLeft   Specifies the distance in pixels of the left dividing line from the left side of the p_w_picpath in a 9-slice scaling formatting system. The distance is relative to the original, unscaled size of the p_w_picpath.
scaleGridRight   Specifies the distance in pixels of the right dividing line from the left side of the p_w_picpath in a 9-slice scaling formatting system. The distance is relative to the original, unscaled size of the p_w_picpath.
 
下表描述了只为SWF文件定义的参数:
 参数 定义 
 symbol 定义了在被植入的SWF文件中的标记。