最早接触flex是在今年深圳的Bea Java2SOA DEV2DEV大会上adobe的人展示flex效果,这个大会唯一的收获就是发现flex的用户体验做得很不错!
在XP使用flex builder 3(基于Eclipse开发)进行开发的,不过这个builder3要钱.......;rails则在unix下,这就导致一个问题,老是要把flex application 编译好了再传过来检验!:(真的是很XX! 不过unix可以使用Eclipse的flex插件,还没试过,应该差不了多少!感觉builder做得还行。很难想象如果flex没有Eclipse这种重量级编辑器提供的代码补全和生成,情况会有怎样!?
1.与Rails的数据交互
我在项目中使用的是E4X数据与Rails交互,方法可以去参考<Manning.Flexible.Rails.Flex.3.on.Rails.2.Jan.2008>不过只有英文版(希望有人能翻译)!一般的数据传输比较简单,但是遇到同时提交多个Model时构造这个XML也是挺麻烦下的:
ActionScript 3语言: 代码发芽网
var params:XML = <orderitems></orderitems>;
for(var i:uint = 0; i < items.length; i++){
params["orderitem"][i].appendChild(<l>{int(items[i].L)}</l>);
}
相反在Rails这边传送多个元素给Flex时可以这样:
Ruby语言: 代码发芽网
render :xml => [[{:total_pages => @patterns.total_pages.to_s}], @patterns]
传递变量时只能这样做[{:total_pages => @patterns.total_pages.to_s}],才能to_xml成功!
其时我们也可以使用JSON或者RubyAMF来传递,而且RubyAMF比E4X更快!
2.动态性
在Html中,我们可以使用ERB来动态生成html标签,Flex中我们就可以使用ActionScript3来动态生成或者显示Flex标签呢!最近看了Jquery,里面的方法真的写得很方便给我们调用;不知道AS3可不可以写成这样来调用:)
3.打印
项目中老师注重打印这个功能,查了下资料没什么难度;因为到时基本上是打印DataGrid里面的内容。不过好像Flex不支持打印预览,只能通过javascript来实现 orz...
4.XML在DataGrid的显示
一般我们都会显示Model关联的Model的属性,如果html中我们可以这样来调用@post.comment.first.body,但是在Flex中这样怎么办呢,因为传递过去的是XML数据,DataGrid不会这么聪明去帮你找到子对象的属性,我们可以这样做:
ActionScript 3语言: 代码发芽网
<mx:DataGridColumn headerText="material" width="50"
labelFunction="materialType">
然后再自己添加这样的一个方法来显示:
ActionScript 3语言: 代码发芽网
private function materialCategory(item:Object,colum:DataGridColumn):String{
return item.mcategory.name;
}
但是我发现这种方法只能显示两层嵌套对象的属性,超过二层嵌套就不行了,如上面:item.mcategory.material.name,返回不了material的名字,因为在Rails在的to_xml方法不支持嵌套子对象的子对象!
这种情况暂时也没有什么办法,我只能将要显示的属性全部add到Model中,也就是加冗余字段!而且这样也可以减少数据的传递,因为你在to_xml时include其它model时,也是将那个model的全部属性传递过去,不过显示时有挺多字段用不上!
5.字符问题
发现在Ubuntu 8.04,Firefox 3.0.3下面,utf 8编码的Flex Application中输入中文会乱码,但是XP下无论FF3还是IE都没有问题!这个也让我很费解下!
6.Flex
Flex的话主要还是要理解事件和绑定,理解这二个的话,后面的就比较容易!还有states,在控件的转换显示中也挺常用到!如果项目比较大的话可以考虑使用Cairngorm这个框架!
Flex.3.CookBook 和 The.Essential.Guide.to.Flex.3这两本书也不错下!Live doc也很常去查!