分类:
2010-05-05 20:46:28
1.本例目的
parsley使用入门
IOC功能基本演示
托管事件及处理演示
2.本例代码结构
src
--Beans.mxml //配置文件
--test.mxml //主程序
com.test.event
--LoginEvent.as //登录事件类
com.test.service
--ILoginService.as //登录处理接口
--LoginServiceImpl.as //登录处理实现类
3.代码详细说明
BeansConfig.mxml
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:spicefactory="">
import com.test.service.*;
]]>
说明:
实例化LoginServiceImpl,该对象的ID为loginService
test.mxml
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:parsley=""
minWidth="955" minHeight="600">
import com.test.event.LoginEvent;
import com.test.service.ILoginService;
import mx.controls.Alert;
//根据ID,将ILoginService的实现类通过parsley自动注入到这里
[Inject(id="loginService")]
public var service:ILoginService;
private function onLoginClick():void{
this.service.login('d_yang','******');
}
//当parsley框架监听到有一个类派发LoginEvent事件,并且类型为loginSuccess时,
//由onLoginSuc函数进行处理。
[MessageHandler(selector="loginSuccess")]
public function onLoginSuc(evt:LoginEvent):void{
//登录后干点啥。。。
btnlogin.label="登录成功";
Alert.show("登录成功");
}
]]>
说明:
1.上下文环境设置
注意:
parsley2.0的代码应该如下,在主程序的 preinitialize
事件和addToStage事件中执行以下语句,初始化所有对象
preinitialize="FlexContextBuilder.build(BeansConfig)"
addedToStage="dispatchEvent(new Event('configureIOC', true));"
2.由于这里使用了parsley,通过IOC,将对象自动注入到接口ILoginService
[Inject(id="loginService")]
public var service:ILoginService;
如果ILoginService只存在一个实现类,则可省略ID号,parsley会自动找到该接口的实现类
[Inject]
public var service:ILoginService;
3.如果将[MessageHandler(selector="loginSuccess")]改成[MessageHandler],则无论是loginSuccess或loginFail(只要是LoginEvent事件),onLoginSuc函数都进行处理。
com.test.event.LoginEvent.as
package com.test.event
{
import flash.events.Event;
public class LoginEvent extends Event
{
public function LoginEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
public static const LOGINSUCCESS:String = "loginSuccess";
public static const LOGINFAIL:String = "loginFail";
}
}
说明:
1.自定义一个登录事件
2.事件中有两个常量:LOGINSUCCESS和LOGINFAIL
package com.test.service.ILoginService
package com.test.service
{
public interface ILoginService
{
function login(user:String, passwd:String):void;
}
}
说明:
1.声明一个登录处理接口
package com.test.service.LoginServiceImpl
package com.test.service
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import com.test.event.LoginEvent;
//声明loginSuccess,loginFail类型的LoginEvent事件为托管事件
[Event(name="loginSuccess",type="com.test.event.LoginEvent")]
[Event(name="loginFailed",type="com.test.event.LoginEvent")]
[ManagedEvents("loginSuccess,loginFail")]
public class LoginServiceImpl extends EventDispatcher implements ILoginService
{
public function LoginServiceImpl(target:IEventDispatcher=null)
{
super(target);
}
public function login(user:String, passwd:String):void
{
var evt:LoginEvent = new LoginEvent(LoginEvent.LOGINSUCCESS);
this.dispatchEvent(evt);//派发LoginEvent事件
}
}
}
说明:
1.由于LoginServiceImpl类会派发托管事件,则该类必须继承flash.events.EventDispatcher类
2.如果是将LoginEvent事件的所有类型都声明为托管事件,则可省略
[Event(name="loginSuccess",type="com.test.event.LoginEvent")]
[Event(name="loginFailed",type="com.test.event.LoginEvent")]
4.开发环境
flash builder4 正式版; parsley2.2.2 ; flex4_sdk_0.0.14159
5.总结
有些朋友遇到注入失败的问题,主要原因是parsley的版本与程序的兼容问题,比如parsley2.0编写的代码就与parsley2.2.2不能互用。
chinaunix网友2010-06-10 21:03:22
为什么我用你提供的例子发生率: 无法访问空对象引用的属性或方法。 我用的是Flash Builder 4,SDK是3.5,莫非要在SDK4下才能运行?