在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库文件