Fluid idea for Life

随笔,杂记

重复使用RSL中的资源

Flex2或3中,运行时的共享库(Runtime shared library)很有用。可以将类放在外部共享中,也可以将图形、小动画以SWF的形式共享。以类的方式共享相对要简单些,就好像Flex3支持SDK缓存一样,甚至可以做到跨域共享。不过这个功能估计要等到 Flex3正式版本出来才看得清楚,现在Flex3 beta的Bug实在太多了。
相比之下,共享图形等资源是非常实用的。由于在Flex中无法直接访问RSL中的图形资源,也就是无法直接取出SWF库中的元件,尽管都已经通过连接方式导出,常见的做法(来自 Programming.Flex.2中的实例):

先在类中嵌入资源,这里都定义为静态属性,方便调用。

ActionScript" style="font-family:monospace;">package com.oreilly.programmingflex {
    public class Images {
        [Embed(source="image.jpg")]
        public static const IMAGE_A:Class;
    }
}

使用:

<?xml version="1.0" encoding="utf-8">
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
    <mx:Script>
        <![CDATA[>
            import com.oreilly.programmingflex.Images;
        ]]>
    </mx:Script>
<mx:VBox>
<mx:Image source="{Images.IMAGE_A}" scaleContent="true" width="100" height="100" />
</mx:VBox>
</mx:Application>

如果我们希望可以更灵活地操作资源,比如添加到任一容器中。毕竟Image是个比较大的控件。进入SDK里面,研究了Image类的代码,我找到了一个比较简单的方法:

var myClass:Class = Class(Images.IMAGE_A);
var child:DisplayObject = new myClass();                    </p>
<p> var u:UIComponent = new UIComponent();
u.addChild(child);

SWF库中的元件都被视为DisplayObject类型,Flex中的容器都重写了addChild方法,只有扩展了IUIComponent的对象才可以添加到Flex容器中,这里借助UIComponent来显示。

Tags: ActionScript, Flex

上一篇: 为Flex Builder装两个实用插件
下一篇: 最近的新闻集合

发表评论

评论内容:

点击获得Trackback地址