- 浏览: 49756 次
- 性别:
- 来自: 青岛
最新评论
Parsley初次应用
- 博客分类:
- 技术杂绘
Parsley是一个比较著名的Flex IoC开源项目,也被adobe所推荐。但在最开始的使用上并不见得那么容易,尤其是在使用XML作为配置文件的时候。
首先考虑用MXML做配置文件,用这种方式是比较容易上手使用的。考虑我们有一个接口LoginService与其实现LoginServiceImpl,以及一个LoginAction类。功能很简单,如下所示。其中LoginAction中引用了LoginService接口,我们希望注入为LoginServiceImpl。 package com.dream.actions { import com.dream.services.LoginService; import mx.controls.Alert; public class LoginAction { [Inject] public var service : LoginService; public function LoginAction():void { trace("loginAction constructor"); } [MessageHandler] public function doAction(event:LoginEvent):void { Alert.show("doAction"); service.login(); } } } package com.dream.actions { import flash.events.Event; public class LoginEvent extends Event { public static const LOGIN_EVENT:String = "login"; public function LoginEvent(type:String = LOGIN_EVENT, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); } } } package com.dream.services { public interface LoginService { function login():void; } } package com.dream.services { import mx.controls.Alert; public class LoginServiceImpl implements LoginService { public function LoginServiceImpl() { trace("LoginServiceImp constructor"); } public function login():void { Alert.show("login"); trace("login"); } } } 在Application页面中,我们只有一个Button,点击该Button发出一个事件LoginEvent,该事件我们注册为ManagedEvents,这样就可以让LoginAction中的doAction接受到。这运用的是Parsley的消息机制。下面是Application对应的代码 flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:spicefactory="http://www.spicefactory.org/pa rsley" minWidth="955" minHeight="600" addedToStage="this.dispatchEvent(new Event('configureView', true))" > [ManagedEvents("login")] 接下来我们看一下如何利用xml进行配置。利用xml进行配置好处在于可以方便修改配置而不用重新编译,但是这样也有很多值得注意的细微之处,刚用的时候很容易犯错误。
LoginService,LoginServiceImpl和LoginAction都跟原来的一样。不同的是我们在src根目录下增加了config.xml,其内容如下 相应的application mxml也做了一定的修改。代码如下。 flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:spicefactory="http://www.spicefactory.org/pa rsley" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHan dler(event)" addedToStage="this.dispatchEvent(new Event('configureView', true))" > [ManagedEvents("login")] --> 加载config.xml时发生找不到类的情况 LoginServiceImpl; LoginAction; ]]--> 这里重要的几点要提出,
(1)利用xml配置,如果在代码中声明了接口属性(如LoginAction中的LoginService service属性),但是在xml中配置了该接口的实现,如本例config.xml中的LoginServiceImpl。由于在代码中没有直接引用LoginServiceImpl,这样编译的时候并不会编译LoginServiceImpl,以至于在运行时,你会发现在IoC初始化的过程中抛出类似于如下的错误
cause(1): Error: Unknown class: com.dream.services.LoginServiceImpl
ERROR: Error processing [object XmlConfigurationProcessor]: One or more errors in XmlObjectDefinitionBuilder:
Error processing file [XmlFile config.xml]:
Error processing element http://www.spicefactory.org/parsley::objects
所以在Application mxml页面中你会发现有这么两行看似没有意义的代码。这两行的加入就会将相应的类编译进来。
LoginServiceImpl;
LoginAction;
这个说明在Parsely的官方文档中可以找到,但是一定要仔细看才能知道,太可惜没有相应的例子了。参考http://www.spicefactory.org/parsley/docs/2.0/manua l/config.php#xml Compiling classes configured in XML One thing you need to be aware of is that in contrast to MXML configuration the classes you use in the configuration file will not be compiled into your SWC or SWF if you don't use them explicitly in your code. This might happen quite often since it is good practice to program against interfaces and only declare the concrete implementation in the container configuration. There are basically three choices to solve this: Add a reference to these classes explicity in your code even though it is not needed. Most developers consider this an ugly hack.
If you want to use these classes as a library, compile them into an SWC (with compc you can include whole source folders into the SWC) and then include the whole SWC into your SWF with the -include-libraries option of the mxmlc compiler.
You can alternatively include individual classes with the -includes option of the mxmlc compiler.
(2)在Application节点中我们有这么一行代码addedToStage="this.dispatchEvent(new Event('configureView', true))"。这个非常重要,因为没有这一行而只有creationComplete对应的build xml的话,虽然config.xml中定义的类会实例化了,但是并没有加到IoC容器中,即使你在mxml中显示的增加[Inject] public var loginAction,也会发现其实loginAction是null,而sendEvent属性也是null。只有增加了这一行代码,才会将LoginAction, LoginServiceImpl实例加到IoC容器中。总之,这一行代码就是告诉IoC容器要将实例注入到这个页面。具体可以参看http://www.spicefactory.org/parsley/docs/2.0/manua l/view.php#intro, 在这篇文章中也可以找到相关的说明http://www.kalengibbons.com/blog/index.php/2009/11 /learning-parsley-part-1-dependency-injection/
发表评论
-
字符串的排列--总结
2012-07-06 09:51 577题目:输入一个字符串,打印出该字符串中字符的所有排列。例如 ... -
验证整数、小数、实数、有效位小数最简单JavaScript正则表达式
2012-07-06 09:45 660输入完按回车后即可验证!(自认为最简单!) 正整数: ... -
正则表达式学习笔记
2012-07-06 09:37 615元字符: \b: 匹配一个位置,可以是一个串中间的某个位置 ... -
AndroidVirtual Devices (AVD)创建、设置
2012-07-06 09:30 9181.将android-sdk 中的to ... -
div的使用
2012-07-05 20:45 6321.div显示在屏幕中央。 ... -
Android 桌面组件【widget】初探
2012-07-03 13:43 579本来打算晚上继续 Api Demos 系列的,不过今天下午 ... -
flex datechooser 日期小例子
2012-07-02 10:38 658在这个例子中,我们讲解的是DateChooser 控件,这 ... -
Flex权威指南3学习笔记之一------界面知识(二)
2012-07-02 10:38 516使用基于条件的约束的布局 1.在viewCart按钮和ch ... -
flex 读取配置文件 与PHP交互 圆饼图
2012-07-02 10:38 609FLEX文件 teacherevalute.mxml ... -
Flex获取操作XML示例
2012-07-02 10:38 576/****** ".",&qu ... -
关于flexigrid一点用法
2012-07-01 00:16 570闲来无事在网上找了一个jquery的grid插件 flex ... -
FlashPaper 使用经验之谈
2012-07-01 00:16 818FlashPaper 使用经验之谈 李志海 201 ... -
在应用中使用Ext Loader
2012-07-01 00:16 607原文:http://www.sencha.com/b ... -
jsp页面
2012-07-01 00:15 550做人,生活,学习,玩.... ...
相关推荐
parsley例子 parsley例子 parsley例子 parsley例子 parsley例子
parsley-flash api 英文的 parsley-flash api 英文的 parsley-flash api 英文的 parsley-flash api 英文的
非常值得参考的材料。在学习cairgorm3的过程中,发现此框架还基于parsley应用架构搭建,于是找到parsley材料共享。
parsley2.4英文开发手册 parsley2.4英文开发手册 parsley2.4英文开发手册 parsley2.4英文开发手册 parsley2.4英文开发手册
Parsley 2.0 is available in early dev mode for testing purpose. You can see it there at the moment: Parsley2 doc Please have a try, and your feeback here would be much appreciated! Thanks
Parsley.js Js validation framwork
若你不知道parsley,但您一定听过Cairngorm、Mate、PureMVC、Swiz或SpringAcitonScript,只要听说过其中之一就好了,因为parsley也是他们行列中的一员,是Adobe项目组今年7月份推荐的一个灵活的flex框架!
parsley-2.3.1资源含有发布的lib库、源码、例子及依赖库等整个资源包
parsley loc框架 flash flex 通用
Flex Cairngorm Parsley 最新的源码DEMO!
parsley框架的入门源码 比官方文档中的例子更进一步 更深入一些
真正的parsley中文版,免费共享给大家,希望对大家有所帮助
Parsley-处理 HTML 为 JSON
Parsley,是一款强大的JavaScript表单验证插件,可以帮助你只使用简单的配置即可实现表单验证功能,这完全基于它的强大DOM-API。 主要特性: 基于超棒的用户体验 超级方便配置 超轻量级(压缩后12K),支持...
Parsleyjs 是一个用来对 Web 表单的输入数据进行验证的 JavaScript 库,无需另写一行 JavaScript 代码。中文版本:https://git.oschina.net/dahouge/Parsley.js 主要特性 基于超棒的用户体验超级方便... 标签:Parsley
NULL 博文链接:https://guiqing85.iteye.com/blog/1228204
parsley-flex api 英文的 parsley-flex api 英文的 parsley-flex api 英文的 parsley-flex api 英文的
parsley 文件学习
ActionScript 中著名的IOC框架Parsley 3 帮助文档 类似ActionScript Spring,比Spring强大完善。 Parsley is an Application Framework for Flex and Flash Applications built upon an IOC Container and ...
NULL 博文链接:https://dk05408.iteye.com/blog/2103326