在这里记录一下个人在FLEX开发中遇到的一些问题。方便一些遇到同样问题的朋友们,能够快速的解决这些问题。
这篇笔记我会慢慢的更新,(PS:有遇到问题就往上面更….)
2015年1月4日 12:53:55 请求txt中数据格式问题
情景:用Flex开发前端的时候,服务端的接口还没有写好。 不能等服务端接口写好再做,这样拖慢进度。
因此,用了虚假的数据,从txt里面读取出来。
问题:Txt格式是这样的:
{ "SysInfo": { "Name": "综合应用系统", "ID": "1" }, "ModuleConfig": { "Name": "xxxxx" } }
结果用UrlLoader请求回数据,解析成JSON对象的时候,报错了。
解析代码:(corelib.swc 里面封装好的解析方法)
var json:String = e.target.data as String; var data:Object = com.adobe.serialization.json.JSON.decode(json);
错误:Error: Unexpected encountered …..(一大串,你出错位置)
解决方案:把txt中的JSON压缩一下, 就 ok 了。
2015年1月4日 13:14:03 Flex加载类库的机制问题
问题描述:Flex加载包的机制: 不管 import 多少包,Flex只会编译你代码中有使用的包。
例子:导入了以下四个包。
import mx.controls.Alert; import mx.controls.Button; import mx.controls.CheckBox; import mx.controls.ComboBox;
代码中,没有用到下拉框这个东西(ComboBox),那么Flex就不会把 这个包编辑到SWF中。
仔细想想是不是好像没有存在什么问题?? 正常情况下,的确是没有问题的。
但是如果我根据 数据库中保存的控件类名(Button,ComboBox…),要生成相对应的控件?
那么问题来了,SWF中,没有把ComboBox 这个包,编译到SWF中。 根据反射出来的类,生成相对应的控件时。报错了(没装Debug版的Flash Play,所以没截图)。
解决方案:方法1:专门定义一个类,定义相对应控件的变量(比较麻烦,如果有新增控件,又要添加变量。)
package strongsoft.utility { import mx.controls.Alert; import mx.controls.Button; import mx.controls.CheckBox; import mx.controls.ComboBox; import mx.controls.DataGrid; import mx.controls.Image; import mx.controls.Label; import mx.controls.RadioButton; import mx.controls.Text; import mx.controls.TextArea; import mx.controls.TextInput; public class ReflectionHelper { private var reflectionHelper_Alert:Alert; private var reflectionHelper_Button:Button; private var reflectionHelper_CheckBox:CheckBox; private var reflectionHelper_ComboBox:ComboBox; private var reflectionHelper_DataGrid:DataGrid; private var reflectionHelper_Image:Image; private var reflectionHelper_Label:Label; private var reflectionHelper_RadioButton:RadioButton; private var reflectionHelper_Text:Text; private var reflectionHelper_TextArea:TextArea; private var reflectionHelper_TextInput:TextInput; public function ReflectionHelper() { } } }
方法2:(网上的解决办法),没测试过。帖子传送门:http://bbs.csdn.net/topics/350037690
applicationDomain = ApplicationDomain.currentDomain; //放在ModuleLocator的creationComplete里去
问题描述: 用URLLoader读取了外部XML文件,然后把读取的XML信息,强转成XML对象。
var xml:XML = data as XML ; //返回 null
然后就奇怪,为什么 用 as 来强转不起作用。
解决方案:
1、用 XML(data)来替代 data as XML 就可以了
2、用 new XML(data) 也可以进行转换。
理由:
1、as 不可以转换顶层的类(比如 str as Number)是没有作用的,顶层类有哪些查阅《As/typeof /instanceof /is的作用》
2、as 强转失败的话,不会报错,只会返回null