轻量级的as3模块配置与加载管理库——可用于配置rsl

上传人:kms****20 文档编号:39980947 上传时间:2018-05-21 格式:DOC 页数:8 大小:36.50KB
返回 下载 相关 举报
轻量级的as3模块配置与加载管理库——可用于配置rsl_第1页
第1页 / 共8页
轻量级的as3模块配置与加载管理库——可用于配置rsl_第2页
第2页 / 共8页
轻量级的as3模块配置与加载管理库——可用于配置rsl_第3页
第3页 / 共8页
轻量级的as3模块配置与加载管理库——可用于配置rsl_第4页
第4页 / 共8页
轻量级的as3模块配置与加载管理库——可用于配置rsl_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《轻量级的as3模块配置与加载管理库——可用于配置rsl》由会员分享,可在线阅读,更多相关《轻量级的as3模块配置与加载管理库——可用于配置rsl(8页珍藏版)》请在金锄头文库上搜索。

1、轻量级的轻量级的 AS3 模块配置与加载管理库模块配置与加载管理库可用于配置可用于配置 RSL该库的设计最初是为了方便配置 RSL,后来发现功能逐渐与 Spring 接近,所以干脆对功能重新规划了一次取名为 Asea,在 AS3 上实现了基本的 IOC 功能。以下内容让您学会如何使用 Asea。packageimport com.alibado.asea.*;import flash.display.Sprite;public class AseaTest extends Spritepublic function AseaTest()/定义配置 xmlvar xml:XML = new XM

2、L();/获取根节点处理器var asea:EaDrop = EaConfig.getDrop(“asea“);/定义上下文对象var context:Object = ;/执行asea.process(xml, context);除非您打算扩展它,否则使用 Asea 的仅需要四步。配置 xml 中定义了您要执行的命令,命令的具体语法将在下面介绍。上下文对象是 xml 命令执行的数据环境,换句话说,您可以在 xml 命令中从上下文对象中获取数据和写入数据,您可以尝试把上下文对象另外保存起来,这样您就可以通过它获取到处理后的结果了。这里提醒一点,如果您的上下文对象并非动态对象,那么当您尝试在 x

3、ml 上写入上下文环境中不存在的属性时,系统将报错(ReferenceError),当然一般来说您没有必要这么做。根节点处理器就是一个大烤箱,您把执行命令和上下文数据交给它,它帮您处理。根节点处理器从 EaConfig 中获取,一般来说获取名字是“asea”的根节点处理器是不会错的,除非您非常确切得知道您的根节点是什么标签。另外方法 process 的第三个参数是成功后的回调,其定义应该是 function(result:* = null):void,result 处理后的结果,如果您的根节点是“asea”,那么result 肯定是 null,该回调存在的意义在于,考虑您的 xml 可能是异步

4、处理的,比如在 xml 中加载个数据什么的。process 的第四个参数是出错后的回调,定义是function(errorCode:int, message:String, target:String, xml:XML):void。对了,您可能还注意到 process 的第二个参数并非直接是 context 对象,而是一个只有context 一个元素的数组。这个问题涉及到作用域链,作用域链的作用将在后面讲到。我知道这样看起来不太友好,希望哪个好人能帮它再封装一层吧。二. 标签处理器Asea 目前提供的标签有:asea,class,get,if,lib,method,new,selector,t

5、race,with,bean。您可以在 EaConfig 这个类的 drops 属性中找到这些定义,drops 是个包含所有标签处理器的数组,如果您定义了自己的标签处理器,可以 push 到这个数组中即可生效。所有的标签处理器都继承 EaDrop 这个类,您只需覆盖 onProcess 方法和 get name 方法即可定义自己的标签处理器。另外提醒一点,标签处理器是无状态的,全局唯一实例,所以如果您的变量不是定义在方法体内,就要小心处理了。这里贴出了最简单的标签处理器package com.alibado.asea.dropsimport com.alibado.asea.EaDrop;pu

6、blic class EaGet extends EaDropoverride public function get name():Stringreturn “get“;/* example:* */override protected function onProcess(dom:XML, value:*, contexts:Array, onComplete:Function, onError:Function = null):voidonComplete(value);在 EaGet 中覆盖了 public function get name():String,需要在该方法中返回该标签

7、处理器的要处理的标签名。另外还要覆盖 protected function onProcess(dom:XML, value:*, contexts:Array, onComplete:Function, onError:Function = null):void,该方法的第一个参数是处理的xml,系统会保证该 xml 的根节点名就是 get name 中指定的名字;第二个参数 value 是在标签中的 value 属性在上下文环境中查询到的数据,如果您不想知道查询的结果想自己处理 value属性,那么您就去访问 xml.value 吧;contexts 是上下文环境;onComplete 是

8、处理成功后的回调,如果您的标签处理器会产生结果,那么就往 onComplete 里面传递结果吧,如果您的处理不产生结果,那也要调用一次 onComplete,因为整个处理链是依赖 onComplete 进行的,如果您的标签有 id 属性且您传递了结果,那么系统会自动把您的结果保存在 id 属性指定的地方,onError 是处理出错后的回调,定义已经在上文中提到过了。除非是特别严重的错误,否则我们不建议因为出错而不调用 onComplete。因为如果您不调用 onComplete,系统会认为您的标签尚未处理完成,整个处理过程将无法继续。三. 上下文环境的操作上下文环境是个数组,其中下标为 0 的

9、对象为“当前上下文”,数组末尾的对象为“根上下文”,一般来说“根上下文”是我们人为提供的,就像 Hello World 程序里定义的那个上下文对象。其他上下文对象则是在运行 xml 时产生的,至于为什么产生,什么时候会产生,这些问题在下文中介绍具体介绍标签时讲解。有了上下文环境,我们就需要在上下文环境总读取和写入数据,通过标签的 value 属性可从上下文环境中读取数据。读取的量可分常量与变量,常量分为 string,number,boolean 三种类型,例如“string/hello world“是字符串常量,“number/110“是数字常量,“boolean/true“是布尔型常量,其

10、余写法都算作变量。root 是一个关键字,代表根上下文,我们可以以root.attr 的方式访问根上下文的属性,也可以root.attr.attr2 的方式进一步访问。this 也是一个关键字,代表当前上下文环境。如果不使用关键字,比如 myBall.x 这样的方式,则系统首先搜索当前上下文环境是否有 myBall属性,若是没有,则再向上一级搜索,直到搜索到根上下文环境,这一点类似与 JS 的属性访问规则。通过 id 属性可保存标签执行的结果,若是 id 为 myBall.x,那么首先系统将在上下文环境中由内向外搜索 myBall 属性,找到 myBall 对象后往其内设置 x 属性。若是 m

11、yBall 属性不存在,则将会在其当前上下文对象中建立 myBall 属性,并且设置 x 属性。同样的 myBall.positon.x的话,若是 myBall 不存在,则建立之,而后建立 positon,最后设置 x。id 的设置同样支持root 和this,若是 id 直接等于this 或者root,那么你就能直接把上下文对象给覆盖了。这相当危险但是有用。四. 标签详解asea:所有标签中最重要的一个,该标签什么属性也不支持,但是它却是其他标签正常运行的容器,它一般作为根节点或者被其他标签处理器作为父类;bean:/* example:* * * * * * * * * * * * */定

12、义一个对象的定义(并不直接执行内部代码),内部第一个标签必须是 new 标签,new 标签执行前当前上下文对象是个空对象,new 标签之后当前上下文对象变成 new 出来的对象。而后的代码可对 new 出来的对象设置属性等操作。bean 标签的执行结果是一个对象定义,当每次被访问时,都会执行一次对应的 bean 标签内部的代码并得到构造出来的内容。class:/* example: */定义一个类的别名,constructor 属性是类的完整命名,id 是类的别名。实际上该别名就是上下文环境中的一个 Class 对象。get:/* example:* */获取属性或者转存属性,get 标签的执

13、行结果就是 value 属性中指定的属性。if:/* example:* * * * * */逻辑判断功能的标签,若是 value 内的值是布尔型 true,则执行内部内容,否则不执行任何操作。lib:/* example: */该标签是动态加载 swf 库到当前 applicationDomain。method:/* example:* * * * * */该标签是执行一个方法,其 value 值对应的对象必须是个 Function,否则结果你懂的。标签的输出是函数执行结果。标签的子标签是参数。实际上参数可以是任何标签,只要能产生输出均可,内部标签的当前上下文对象是个数组,该数组将最终成为

14、Function 执行的参数。new:/* example:* * * * * * */该标签的功能是实例化一个对象,value 的值可以是上下文中的 Class 对象,也可以是类的全名(先搜索上下文内容)。new 标签输出结果是实例化的结果。new 标签内部的标签是构造函数参数,其实现原理与 method 标签一样,另外,构造函数参数个数不能超过十个。selector:/* example:* * * * * * * * * * * * 子节点规则:onComplete 参数第一个为 true 则跳出,否则继续。*/该标签类似于 switch,当其内部标签的执行结果是 true 的时候,才停止执行,否则将一直执行下去。trace:/* example: */该标签直接在控制台输出 value 的内容,用于调试。with:/* example:* * * * * */

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号