Parsley sample

1.本例目的
parsley使用入门
IOC功能基本演示
托管事件及处理演示

2.本例代码结构
src
--Beans.mxml //配置文件
--test.mxml //主程序
com.test.event
--LoginEvent.as //登录事件类
com.test.service
--ILoginService.as //登录处理接口
--LoginServiceImpl.as //登录处理实现类

3.代码详细说明
BeansConfig.mxml
<?xml version="1.0" encoding="utf-8"?>
<fx:Object 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:spicefactory="http://www.spicefactory.org/parsley">
<fx:Script>
<![CDATA[
import com.test.service.*;
]]>
</fx:Script>
<fx:Declarations>
<spicefactory:Object type="{LoginServiceImpl}" id="loginService" lazy="true" />
</fx:Declarations>
</fx:Object>

说明:
实例化LoginServiceImpl,该对象的ID为loginService

test.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application 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"
minWidth="955" minHeight="600">
<s:layout>
<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>

</s:layout>
<fx:Declarations>
<parsley:Configure/>
<parsley:ContextBuilder config="BeansConfig"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
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("登录成功");
}
]]>
</fx:Script>

<s:Button id="btnlogin" label="未登录" click="onLoginClick()"/>
</s:Application>
说明:
1.上下文环境设置

<fx:Declarations>
<parsley:Configure/> //将当前窗体注册到parsley
<parsley:ContextBuilder config="BeansConfig"/> //加载配置文件,初始化
</fx:Declarations>

注意: 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不能互用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值