本文和大家重点讨论一下Flex4兼容模式移植到发布版本的问题
Flex4兼容模式移植到发布版本的问题
1.Flex4发布版本spark.swc默认不能使用兼容模式,编译报错。
2.在以前的兼容模式下,默认的主题spark能使用Halo主题的组件属性,但在完全的Flex4编译模式下不能使用。
(1)去掉组件中spake主题不存在的属性,使用skinclass属性,并编辑皮肤组件替代(但对于旧有的项目,显然代价太大)
(2)改变项目默认的Spark主题,以前大多数的Halo主题属性都能使用,不过像:<ns:canvaspaddingTop=""padding***="">就不能使用了,不过没关系,一般在canvas组件中包含其它的框架组件就能解决。(工程量大大的减小了)
(3)如果是以后新建的组件***使用Spark组件构成,理论上设计与逻辑结构更为自由,不过得努力学习一下skin组件的使用方法了~(这对Developer来说,有点难过)
3.Flex4发布版的构建路径中默认使用“运行时RSL方式”,但程序运行时报错“ClassSparkSkin不能找到……”(头晕>_<!!!)***使用“合并到代码中”先解决问题,日后再解//TODO
4.附加编译参数:-keep-all-type-selectors=true(这个是好东西,一直不清楚如何使用,得好好看看这方面的!!!)
不带这个参数时,运行程序可能报无法找到×××组件外观Error。烦死了开始时侯,一大堆组件外观不见了。
5.无法解析的空对象……>_<!!!
在兼容模式下好好的程序放到Flex4下竟然出现一大堆莫名其妙的nullObject问题。原因可能是编译机制的改变,使得运行时代码执行顺序发生改变而引起的(注意:只是可能,猜想!)
(1)状态引起的空对象问题
有时候在父组件中使用到includein=“state”itemcreation=“imitation”
子组件使用了creationcomplete=“init()”
init()方法使用时机不好,子组件还没创建好就执行了init()方法,暂时这样解决:
父组件:includein=“state”itemcreation=“imitation”creationcomplete=“init()”(就是把子组件需要创建好后执行的方法放到带状态的父组件执行)
(2)Swc域引起的空对象问题
不明白Swc域的可以搜搜Applicationdomain我也解析不好。反正如果划分了模块的话就有能一起这样的问题。由于每个编译的swc文件运行时都有自己的一个域,主应用程序域和Module域,(主应用程序域中理论上应该创建好Module所需的数据,让Module在需要的时候取得,但有时候Module就是拿不到,引起空对象)这时候只好在主应用程序中显式声明“傀儡类”>_<!!!//TODO
6.组件状态显示异常
又是Flex4—Release问题,当发现组件指定的状态显示不正确时,尝试把组件的那个状态放在<mx:states>声明的***个位置,看看是不是正常了。(由状态引起的问题确实令人抓狂>_<!!!)
7.组件状态不显示
假如6中的方法仍然没有解决好问题,尝试把状态控制的去掉,使用属性Visible=“isshow?true:false”控制,尤其建议使用在父组件和子组件都带有状态控制时,修改子组件的状态控制。
8.绑定不是***的…………
当发现组件绑定的数据没有问题,而组件却问题大大时,手动代码绑定试试!(简直雷倒众生>_<!)
余下的是spike问题
【编辑推荐】
- 解析Flex4的十大变化
- Flex4Beta引入新元素功能更强大
- Flex3到Flex4的转变新特性值得关注
- FlexBuilder3.0与Eclipse3.4的***结合
- 从Flex3到Flex4的转变一览