logo
1 2
 
 
|
|
|
|
|
|
|
|
|
校区论坛
 
 
您的位置:首页 - 软件开发
Flex利用组件开发减小页面文件尺寸简单实现
[2010-01-29]
Flex什么都不错,效果尤其很棒,可是遗憾的是页面文件的尺寸太大

作者:陈明

Flex什么都不错,效果尤其很棒,可是遗憾的是页面文件的尺寸太大,在我们的带宽不够的现实中,我们发现打开个网页慢的实在受不了,仔细找了下制造FlexAdobe公司,发现他们的解释是

1)          可以利用组件化开发减小页面尺寸大小到1/2)

2)          Flex主要用于公司内部带宽比较大的场合比较好。

看来Flex真正大面积在互联网运用还有很长一段路要走。下面我们来看下简单的Flex组件开发的一个案例:

    flex组件可以用两种文件格式编写,一种是.mxml,一种是.as.mxml文件的组件例子:

(在工程下新建mxml application):

MyItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">

    <mx:Script>

       <![CDATA[

           import mx.controls.Alert;

           private function onClick(e:MouseEvent):void{

              Alert.show(data.price);

           }

       ]]>

    </mx:Script>

    <mx:Image source="{data.pic}" click="onClick(event)" width="60" height="80" />

    <mx:Label text="{data.username}"/>

</mx:VBox>

另一个比较麻烦在同目录下建立as文件(TestComponent.as)

package store.view.products

{

    import mx.controls.Image;

    import mx.controls.Label;

    import mx.core.IDataRenderer;

    import mx.core.UIComponent;

    import mx.events.FlexEvent;

   

    [Bindable(name="dataChange",type="mx.event.FlexEvnet")]

    public class TestComponent extends UIComponent implements IDataRenderer{

       private var image:Image;

       private var labPrice:Label;

       private var labName:Label;

       private var _data:Object;

      

       public function TestComponent() {

           super();

       }

       [Bindable("dataChange")]

       public function get data():Object{

           return _data;

       }

       public function set data(value:Object):void{

           _data = value;

           invalidateProperties();

           dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));

       }

       override protected function createChildren():void{

           super.createChildren();

           image = new Image();

           labPrice = new Label();

           labName = new Label();

           addChild(image);

           addChild(labPrice);

           addChild(labName);

       }

       override protected function measure():void{

           super.measure();

           measuredWidth=100;

           measuredHeight=150;

           minWidth=100;

           maxHeight=150;

       }

       override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{

           super.updateDisplayList(unscaledWidth,unscaledHeight);

           this.graphics.beginFill(0xffffff,.3);

           this.graphics.drawRect(0,0,100,150);

           this.graphics.endFill();

           image.width=90;

           image.height=90;

           image.move(5,5);

           labName.width=90;

           labName.height=90;

           labName.move(5,100);

           labPrice.width=90;

           labPrice.height=20;

           labPrice.move(5,120);

       }

       override protected function commitProperties():void{

           super.commitProperties();

           if(!data)

              return ;

           image.source=data.source;

           labPrice.text = data.price;

           labName.text = data.productName;         

       }

     }

}

最后在页面各自调用方法如下:(下画线处注意)

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"  creationComplete="onCreationComplete()" xmlns:products="store.view.products.*">

    <mx:Script>

       <![CDATA[

           import mx.collections.ArrayCollection;

           [Bindable]

           private var product:Object;

           [Bindable]

           private var arr:Array;

           private function onCreationComplete():void{

              //product传送数据

              product={source:"images/tv.jpg",productName:"TV",price:"$9900"};

arr = [        {pic:"images/tv.jpg",username:"tv",price:"60"},                   {pic:"images/phone.jpg",username:"phone",price:"160"},          {pic:"images/computer.jpg",username:"computer",price:"2600"}];

           }

       ]]>

    </mx:Script>

    <mx:ArrayCollection id="ma" source="{arr}"/>

    <mx:DataGrid dataProvider="{ma}" rowHeight="120" height="330" >

       <mx:columns>

       <!--利用itemRenderer调用MyItemRenderer.mxml组件-->

           <mx:DataGridColumn headerText="图片" itemRenderer="store.view.products.MyItemRenderer" fontSize="12"  textAlign="center"  >

           </mx:DataGridColumn>

           <mx:DataGridColumn dataField="price" headerText="商品价格" fontSize="12"  />

       </mx:columns>

    </mx:DataGrid>

       <mx:Panel title="MyComponentDome"  paddingLeft="10">

       <!--利用products:TestComponent调用写好的TestComponent.as组件-->

       <products:TestComponent data="{product}"/>

       </mx:Panel>

</mx:Application>

稍微总结下,上面的两个例子在本质上都是一样的,mxml文件实质上是一种包装好了的as文件,只是模样不一样而已。在设计界面时,用mxml比较直观也很方便,在做业务或复杂功能组件的开发时用as更为得心应手。
下一篇:Linux ext2ext3文件系统详解
   
flex用RemoteObject方式与java交互 flex用RemoteObject方式与java交互
flex的跳转 flex的跳转
 
 
课程咨询
 

 
北大青鸟全国免费服务电话:400-887-5191(我要就业)    苏ICP备08102142号
南京(软件测试)校区地址:南京市中山南路89号江苏文化大厦22F 咨询电话:400-887-5191 
南京(软件开发)校区地址:南京市白下区建邺路66号3层(张府园地铁3号出口) 咨询电话:025-84200066 
徐州(软件开发)校区地址:徐州市解放南路181号北大青鸟中博(六中对面) 咨询电话:0516-85628888
中博教育客服在线
  陆老师 唐老师 韩老师
  武老师 蒋老师 时老师
  徐老师 郭老师 李老师
 
学费咨询
学历咨询
专业咨询
订座试听
就业咨询
课程咨询
测试认证
软件认证