最近换了一家公司,刚进公司的第一天就被坐在旁边的项目经理通知,最近没啥事学学flex,然后一直到现在已经打一个月的酱油了,当然也学了点flex3和ActionScript3.0的皮毛,所以想最近写个总结来纪念我打酱油的生活。
刚进公司人生地不熟的,也没啥文档问经理要了一个flex3.0的API和一系列的flex Example还有一个FlexBuilder3开发工具,就这样我就轻装上阵开始了我的flex旅途。
应朋友介绍刚开始学习的是ActionScript3.0,借了本《ActionScript3.0的基本教程》这本书,然后就开始慢慢啃AS这门脚本语言了,刚开始觉得这语言很变态例如声明变量什么都和java反着来.写一个验证文本框是否为空的方法
来和其余脚本比较下
//方法返回值要写在大括号的外面:不习惯
private function checkLogin():void
{
//声明变量既然as中不在像js中那么是弱类型为什么还需要var关键字呢?不解
var loginName:String = txtLoginName.text.toString();
if(""!=loginName)
{
Alert.show("Login Success!");
}
Alert.show("Input your LoginName!");
}
就这样很不适应的写了几个方法学习适应AS的基础,在然后就开始熟悉它的基本语法了,包含:
array, hash, loop, if else,for....
由于之前有过java和js的经验所以这些也上手的很快了
在然后就是一些AS稍微上层的东东,包含:
DisplayList (DisplayObject, DisplayObjectContainer)與 Event system(bubbling, propagating…)
Sound, Video, NetConnection 與 Graphics class
这些我也没怎么深入,就草草的过了下,我是个急性子的人总是想看到效果,就开始研究Component,其实也就是学学flex本身的控件,学习的方法就像刚开始学习HTML那样通过用它本身的一些控件,我主要认为他的控件和HTML一
样分为三大类
-Controls: Button, DateChooser, Slider…
-Containers: Box, DividedBox, Panel…
-List: DataGrid, Tree, TileList…
现在已经学会了如何用这些元件,了解了每个元件的 properties, events, styles, effects属性所代表的含义,由于主要是从API里面学习的,所以可能有一些好的方法不会。。
然后我用FLEX+AS3.0做了一系列的DEMO。
当我稍微感觉有点欣慰的时候压力来了,上个周5我的直接老大的老大看我每天闲着没事让我用flex做一个考试系统.做成swf后缀的,我囧了。。。因为那个老大不知道我不会flex。但是老大往往不管那么多,他们只管结果。
需求是这样的:
你有一个*.txt的文件里面保存着题目
eg: 1.您喜欢的运动
A.篮球
C.足球
D.羽毛球
这些题目选不同的选项会得到不同的分数,这写分数可以在txt里面配置,然后把题目刷到系统中,考生答题结束后管理员可以看到得分。
然后我就开始分析需求,当时我总结了几个可以卡到我的地方
1.flex如何做文件读写的操作
2.读写好之后如何在页面想添加这些考题元素
3.我如何用as得到考题信息并计算分数
问题分析好之后我直接放弃了flex做文件读写操作的,因为手头资料不够,想下班回家问问google,外包不能上网呵呵。于是我就想了一个损招,声明了3个数组保存题目,第一个数组保存 题目 第二个数组保存选项 第三个数组保存
分数,然后查看API发现form有个addChild方法,AS也可以声明元素,就这样我就声明了RadioButton和Lable对象通过form的addChild方法在使用两个for循环来遍历那三个数组总算是把题目刷了上去,就这样简单的几行代码纠
结了我一下午,对自己越来越没信心了,6点钟下班,那个老大也没有问我要,所以我就加速的跑回了家查看了下flex读写文件的操作,在网上查的结果是flex在web方面不支持文件操作,可以通过java来读写传递.
这样就引发了第四个问题
4.JAVA如何和flex交互
刚开始我用的是service控件通过send方法给servlet发送消息,但是我发现不能接收到返回值,然后找丫找,,终于找到了一个叫RemoteObject的东东,然后就开始研究这东东,看着网上介绍感觉好麻烦,最后google这位大神给
我推荐了blazeds这样一个小的框架,然后在网上下载了一个blazeds的helloworld的DEMO,和blazeds的war包。大体步骤为>
1。创建一个java web的项目用blazeds.war下面的WEB-INF覆盖自己创建javaweb的web-info目录
2。配置WEB-INF目录下flex下remoting-config.xml添加destination结点来告诉Flex应用程序如何连接上Java class的
3。在flex application节点下创建RemoteObject 对象,然后写as回调函数接收返回值
这三个步骤写好之后我就开始用java中的IO读取那个令我纠结的txt文件,我首先声明一个exam对象里面有一个String类型的对象用来保存题目,一个List类型的对象用来保存答案,一个List对象用来保存分数,然后用IO遍历文件将
对象放在List中,然后用AS声明了一个exam对象来通过那个回调函数接收java的返回并遍历得到每个exam对象,通过之前的form.addChaild方法将题目刷到页面中,通过百般调试和尝试终于题目出来了。。。欣喜若狂。。。然后
剩下的就是之前的第三个问题,如何取得分数,我用了一个非常戳的方法,遍历页面上的每个radiobutton对象,判断是否被选中如果被选中的取得其数值然后++。唉,,,性能虽然低下,但是总算成功的得到了考题分数。
就这样这个纠结的任务让我给搞定了,我的周末也就这样没了,由于写的代码非常基础,在这也就不贴出来了。
对于flex我还是一个菜菜鸟,希望以后能用的非常熟练。
天高任鸟飞