flex类绑定

在flex项目开发过程中,如果一个类太大,可以分解为几个类。因为flex类之间的通信不方便,如果是mxml类型文件可以用parsley框架,但是as之间或者mxml和as时间通信是非常不方便的,如果业务逻辑处理都放在一个mxml里边或者主应用程序里边会导致庞大的类不但编译缓慢,运行的效率也会降低。当前所作的项目就是这样,我们采取了分解的办法,将一些业务逻辑和试图展示尽量分开。新建as文件,这样可以加速编译(mxml最终都会编译为as类型运行),具体实现框架如下:

1,需要分解的胖类FatA.mxml'

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

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx"
         xmlns:parsley="http://www.spicefactory.org/parsley">

 <fx:Script>
        <![CDATA[

          //ModelA为新类,在这个类可以获取到当前这个类的所有数据

           [Bindable]
            public var modelA:ModelA;
           
            [Bindable]
            public var modelA:ModelB;

          protected function injectionModelA(event:Event):void
            {
                modelA.bindView(this);
            }
            protected function injectionModelB(event:Event):void
            {
                modelB.bindView(this);
            }

            //需要分解到ModelA时,使用modelA.方法名即可

 ]]>
    </fx:Script>

 <fx:Declarations>

<!-- 引入配置文件-->

<parsley:ContextBuilder config="com.huawei.wfm.scheduling.monitor.context.ApplicationContext"/>
    <parsley:Configure/>

 <parsley:FastInject injectionComplete="injectionModelA(event)" objectId="branchA"    property="modelA"/>
 <parsley:FastInject injectionComplete="injectionModelB(event)" objectId="branchB"   property="modelB"/>
 <parsley:Configure/>

   </fx:Declarations>

2,  事件派发(绑定原理是parsley)

  [Bindable]
    public class BreakModel extends EventDispatcher
    {
        protected var view:UIComponent;
       
        public function BreakModel(){}
       
        /**表现层模型持有视图的引用*/
        public function bindView(view:UIComponent):void
        {
            this.view = view;
        }
    }

3,parsley配置框架

<?xml version="1.0" encoding="utf-8"?>
<Object xmlns="*"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        xmlns:breakModel="com.test.breakTest.*">
    <fx:Declarations>
  
        <breakModel:ModelA id="branchA"/>
        <breakModel:ModelB id="branchB"/>
     </fx:Declarations>
</Object>

 

 

4,分支类A(B类似)

package com.test.breakTest

{

 [Bindable]
  public class ModelA    extends AbstractModel
  {

     public var  fatAcopy:FatA= new FatA();

      //可以写逻辑代码,如果涉及到FatA.mxml视图改变时,

       // 使用fatAcopy= FatA(view),视图会自动更新,

      //  引用胖类的变量使用fatAcopy.*

  }

}

这样就可以减轻胖类的负担,其实质还是parsley框架,所以必须先引入parsley库文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值