时间过得真快.
在新疆的日子就像坐牛车, 晃晃悠悠的慢的度日如年, 离开新疆后的的日子就像磁悬浮, 嗖嗖的感觉浦东机场就在家门口.
十月,十一月, 转眼08年就要过去了…
十月除了工作学习与生活之外, 最大的一件事情就是老刘同学的突然造访. 套用Fan同学的话来讲, 就是一个特大号的礼包. 把老刘同学从奉贤接回加来住之后, 为了让老刘同学保持他的3T生活[淘宝,天涯,土豆], 我们为老刘同学提供了一台足够快的苹果机, 高速联网之外, 同时为其开放了家里的多媒体并代码服务器, 由于苹果版本较旧, 没有合适的QQ, 只好为老刘同学献上了一台HP的多媒体平板电脑…保证了老刘同学的文化生活之外, 俺们陪他分别逛了宜家, 城隍庙, 南京路, 外滩, 因为世纪公园离家太近, 又没有老刘同学要求的摩天轮及过山车等吸引他及众多小孩的玩具, 于是没有去世纪公园.
哥去香港回来顺带给老刘买了一盒比较高级又没有听说过的化妆品, 老刘高兴地憋了一晚上第二天一早起来打电话于众姐妹, 其欢喜之情溢于言表.
时间过得很快,眨眼老刘同学就带着满心踏实与离别的小忧愁踏上了回川的路…
今天我娘从老家赶来上海, 背了两个大包, 除了自己做的新被子之外还有若干水果并土特产, 让人心酸又让人感动.
经济危机, 牛奶, 橘子, 鸡蛋, 印度爆炸, 中国工人惨死非洲, 阴雨连绵, 有个安身的处所, 家人都还健康, 事业正在起步, 老刘同学学习也很努力, 看起来真的很幸福, 很踏实, 生活,开始慢慢美好起来….
[地址:http://opensource.adobe.com/wiki/display/flexunit/Downloads] 并在应用中加入库文件:
目前版本为0.9, 下载完解压缩之后, 在Flex或AIR工程的Flex Build Path的Library Path中加入FlexUnit.swc库文件.
待测试的单元:
package { public class SimpleConverter { public function SimpleConverter() { } public function convertToString(i:int):String { var s:String = "错误!" if(i == 1) { s = "是"; }else { s = "否"; } return s; } } }
测试用例:
package { import flexunit.framework.Assert; import flexunit.framework.TestCase; public class TestSimpleConverter extends TestCase { public function TestSimpleConverter(methodName:String=null) { super(methodName); } /** * 测试用例 */ public function testSimpleConverter():void { var sc:SimpleConverter = new SimpleConverter(); var s:String = sc.convertToString(1); Assert.assertEquals(sc.convertToString(1), "是"); } } }
import flexunit.framework.TestSuite; private function onCreateComplete():void { var ts:TestSuite = new TestSuite(); ts.addTest(new TestSimpleConverter("testSimpleConverter")); testRunner.test = ts; testRunner.startTest(); }
在没有使用ASDoc之前, 我的注释总是乱七八糟, 并且胡说八道. 该讲的没有讲清楚, 废话比代码还多. 自从抱着试试看的态度用了一下ASDoc, 俺决定认真参照公司的代码规范, 认真规范下俺不曾被规范的注释.
ActionScript注释生成工具很多, 但俺们就使用ASDoc.
常用的注释:
@param
@return
@throws
@see
如:
/** * 解析给定的I18N语言字符串, 并通过fieldStringToLocalizationItem将之转换为LocalizationItem对象,放入到ArrayCollection中. * @example 处理里一串I18N语言字符串 * * stringToAC('{zh=简体中文}{zh_tw="繁体中文"}', false); * * @param s:String 待处理的字符串 * @param strict:Boolean 是否采用严格机制来处理, 默认为ture,意为如果字符串不合要求则报错; 可指定为False, 忽略错误,完成操作. * @return 处理完后包含有LocalizationItem的ArrayCollection; 如果制定的字串为NULL,则返回一个空的ArrayCollection; * @throws Error 如果strict为true,在检测到字符串不合要求时会throw Error. * @see #fieldStringToLocalizationItem() */ public static function stringToLocalizationItems(s:String, strict:Boolean = true):ArrayCollection { .... }
[这个文档写的很粗糙] 经过ASDoc生成后的文档如下:
当需要see顶级类中的函数时
@see Array#pop(); (Method)
@see Array#length; (Property)
需要see本类某函数时,如需要see下本类的 fieldStringToLocalizationItem(fieldString:String, strict:Boolean = true)函数, 则:
@see #fieldStringToLocalizationItem().
关于@see的详细介绍: http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_7.html#188433
不足之处就是开发工具对注释的支持实在是不敢恭维.
-source-path, 该path指明了源代码存放的位置
-doc-classes, 需要生成目录的类 , 在使用该变量之前必须已经声明-source-path;
如: asdoc -source-path . -doc-classes comps.GraphingWidget comps.GraphingWidgetTwo 则意味着生成当前目录下,comps\GraphingWidget .as 与comps\GraphingWidgetTwo.as的文档
-doc-sources: 指定某目录, 生成该目录及其子目录下所有.as文件的注释. 可以单独直接使用,也可以配合使用-source-path. 如:
doc-sources E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\com\\insprise
或配合使用:
-doc-sources com\\insprise
-source-path E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\com\\insprise
其他信息基本上都是无关紧要不痛不痒的一看明白.
可参照:http://liguoliang.com/2008/10/280/
在所在工程中新建一个properties文件,用以保存相关配置, 同时建立一个bulid.xml, 用以提供ANT配置文件.
1: 为便于管理与配置, 将ASDoc的参数放置于一个properties文件中, 在本例中我们取名叫做: asdoc.properties
含如下信息:
FLEX_HOME = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\FBPlug-in301\\sdks\\3.1.0
asdoc.exe = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\FBPlug-in301\\sdks\\3.1.0\\bin\\asdoc.exe
dir.docSource = com\\insprise\\localizationeditor
dir.src = .
dir.output = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\doc
main.title = Test
window.title = test
footer = Insprise Software
以上提供了ASDoc的路径, 源文件的目录, 文档输出目录, 以及文档的网页标题, 文档内标题, 文档页脚等信息.
2: Build.xml配置: [因代码高亮代码有误,导致bulid.xml显示有误,请参照网页源代码自行修正]
ANT运行build.xml之后,将会自动生成文档到输出目录.
ASDoc具体的参数配置可参见:http://liguoliang.com/2008/10/286/
当ANT编译成功后,会出现如下提示[这个是在Eclipse中使用ANT编译后的输出信息]:
Buildfile: E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\src\build.xml
clean_Old_Docs:
[delete] Deleting directory E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc
[mkdir] Created dir: E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc
create_Docs:
[exec] Loading configuration file E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\FBPlug-in301\sdks\3.1.0\frameworks\flex-config.xml
[exec] Documentation was created in E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc\
main:
BUILD SUCCESSFUL
Total time: 26 seconds
与窗口一样, 在一个AIR应用中, 菜单也是不可或缺的.
虽然在AIR中菜单有多种实现方式, 但是所有的Menu都是相同的,只是其实现方式不同而已,因此, 我们建立一个菜单, 使用不同的方式实现:
var menuFile:NativeMenu = new NativeMenu(); //如果需要在选择save时进行处理,则监听Event.SELECT事件, 如:save.addEventListener var save:NativeMenuItem = new NativeMenuItem("Save"); var close:NativeMenuItem = new NativeMenuItem("Close"); menuFile.items = [save, close];
在苹果里叫做application menus, 不过本质都是相同的NativeMenu. 没有苹果机, 只说说Windows下的Window Menus. 当然也可以检查系统是否支持NativeMenu,或是application menus, 如:
if(NativeWindow.supportsMenu) ;
注意: 如果要在窗口中使用Window Menus , 他的配置文件或属性中systemChrome必须设置为"standard",否则将在编译时发生错误.
Window Menus的实现:
if(NativeWindow.supportsMenu) { //检测是否支持Window menu var mainMenu:NativeMenu = new NativeMenu(); mainMenu.addSubmenu(menuFile,"File"); //加入子菜单 nativeWindow.menu = mainMenu; //将菜单加入到程序中. }
效果:
我们可以给AIR程序中的Flash或基于Flash的对象设置Context Menu. 注意:
1. 在AIR中, Context Menu是 NativeMenu的实例, 而在Web应用中[Flex], 它是ContextMenu的实例
2. Context Menu可以在AIR应用之上或超出其范围显示. 它是系统级别的.
Context Menu的实现:
buttonOpen.contextMenu = menuFile;
效果:
你可以通过编程方式在任何时候使用Pop-Up Menus, 一般情况下,在用户按下某个键, 或是点击鼠标后弹出Pop-UpMenus. 不论是何种方式, 只需要运行NativeMenu实例的display()方法,将Pop-Up Menu显示便可.
监听textInput的右键Down事件:
textInput.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, onTextInputClicked);
该事件的响应函数,将会阻止在textInput中右键的默认菜单, 将其菜单换做上面我们定义的menuFile. 该响应函数如下:
private function onTextInputClicked(e:MouseEvent):void { e.preventDefault(); menuFile.display(stage, mouseX, mouseY); }
效果:
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.