Flash CS4新特性——支持部分Flex组件

今天又发现Flash CS4的一个新特性:支持部分Flex组件,这得益于Flash CS4对Flex SDK的部分支持。

大家都知道,在Flash 8中有大量类似于Flex的组件,但在Flash CS3中却被去掉了,Flash CS3的组件都是轻型组件,抛弃了Flash 8/Flex的重型架构,因此我们不能在Flash CS3使用Webservice组件。在Flash CS4,我们可以使用Flex SDK来编译AS,也可以用Flex的Webservice组件来连接Webservice服务。

首先,选择Prefences>ActipnScript>ActipnScript 3.0 Settings..,打开如下对话框,添加编译Webservice所需的两个SWC:framework.swc和rpc.swc。

ActipnScript 3.0 Advanced Settings

添加如下代码:

package { 
    import fl.controls.List; 
    import flash.display.Sprite; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.soap.LoadEvent; 
    import mx.rpc.soap.Operation; 
    import mx.rpc.soap.WebService; 
    [SWF(backgroundColor="0xFFFFFF",width="200",height="220")] 
    public class City extends Sprite { 
        private var ws:WebService = new WebService(); 
        private var list:List = new List(); 
        private var op:Operation; 
        public function City() { 
            addChild(list); 
            list.setSize(180, 200); 
            list.move(10, 10); 
            ws.addEventListener("load", loadHandler); 
            ws.loadWSDL("http://www.webservicex.net/globalweather.asmx?WSDL"); 
        } 
        private function loadHandler(evt:LoadEvent):void { 
            op=Operation(ws.getOperation("GetCitiesByCountry")); 
            op.addEventListener("fault", faultHandler); 
            op.addEventListener("result", resultHandler); 
            op.send("China"); 
        } 
        private function faultHandler(evt:FaultEvent):void { 
            trace(evt.fault); 
        } 

        private function resultHandler(evt:ResultEvent):void { 
            for each (var xml:XML in XML(evt.result)..City) { 
                list.addItem({label:xml.toString()}); 
            } 
        } 
    } 
}

发布时可以选择Flash Player 9及以上版本。

显然,在Flash CS4使用Flex组件会使用swf文件大小猛增,因此慎用为好。

发表评论