一. Flex中有些控件只有在使用的时候才会初始化。这个特性在一些Navigator容器,如ViewStack,Navigator和Accordion中表现得最为明显。当这些容器初始化的时候,它只会初始化显示在最前面的的子容器,其它的容器其实没有初始化,如果你现在要对那些容器中的某些控件进行操作,就会出现:TypeError: Error #1009: 无法访问空对象引用的属性或方法。昨天这个东西困扰了我长达几个小时,后来终于恍然大悟。
问题解答:在控件中加入 creationPolicy="all",这样就不会为空异常了。
二.如何限制TextInput中的输入。其实文本输入控件TextInput和TextArea都有一个restrict属性,它可以控制TextInput的输入。这个东西挺有用,可以防止输入恶意字符串。不过Flex 帮助文档中对这个属性介绍的不够全面,经过我实验N次,总结出了几条新的经验:
1.如果你想要控制用户只能输入字母和数字,就这样写:restrict="a-zA-Z0-9"。帮助中只给出了一个例子说"a-z"就是只允许输入小写字母,但是没有说如何多重限制,自己实验了一下,终于成功。你按照我上面写的那样做就可以多重限制了,中间不用加空格,我实验过了。
2.帮助文档中写了“^”符号可以限定不允许输入的字符串,比如"^0"就是不允许输入0。同样,帮助中也没有说明如何限定多个字符。实验结果如下:想要控制多个字符的时候需要加括号,这样歇restrict="^(';:)",就可以限定多个字符了。另外,你想控制的字符有<>这样在MXML中有特殊意义的字符的话,请转换成 < 的形式。至于每个符号的编码是怎么样的,请打开DreamWeaver,在代码编辑器中输入&,然后查看代码提示,方便又快捷!
三.DataGrid的labelFunction。我需要在DataGrid中现实时间,但是后台传回的是格林威治时间,很长,我得需要格式化,这就要用到 labelFunction 属性。这个属性的值是一个函数,这些都在帮助文档中有说明,我就不多说了,我想说的是如何用这个东西。先说一下这个函数需要的两个参数:item:类型Object,column:类型DataGridColumn。其中item保存的是显示在DataGrid中的每一个对象的引用,而column表示的就是当前列,这个column好像没什么用。我一直以为必须要用到column才可以,结果总是显示错误。最后终于成功。代码如下:
private function formatLabel(item:Object,column:DataGridColumn):String
{
return df.format(item.dates);// df是一个DateFormatter,item中
//的dates放的是格林威治时间
}
这几天学会的技巧主要就是这些,都是花了不少时间才学会的。以后遇到类似问题就顺手多了。
补充一点:DataGrid的dataProvider是一个ArrayCollection。当你为DataGrid设定dataProvider的时候可能会给它一个对象数组,但是当你操作的时候要记住,dataProvider不再是对象数组了,你必须把它作为ArrayCollection来操作。List控件估计也是一样,我没有试过。
问题解答:在控件中加入 creationPolicy="all",这样就不会为空异常了。
二.如何限制TextInput中的输入。其实文本输入控件TextInput和TextArea都有一个restrict属性,它可以控制TextInput的输入。这个东西挺有用,可以防止输入恶意字符串。不过Flex 帮助文档中对这个属性介绍的不够全面,经过我实验N次,总结出了几条新的经验:
1.如果你想要控制用户只能输入字母和数字,就这样写:restrict="a-zA-Z0-9"。帮助中只给出了一个例子说"a-z"就是只允许输入小写字母,但是没有说如何多重限制,自己实验了一下,终于成功。你按照我上面写的那样做就可以多重限制了,中间不用加空格,我实验过了。
2.帮助文档中写了“^”符号可以限定不允许输入的字符串,比如"^0"就是不允许输入0。同样,帮助中也没有说明如何限定多个字符。实验结果如下:想要控制多个字符的时候需要加括号,这样歇restrict="^(';:)",就可以限定多个字符了。另外,你想控制的字符有<>这样在MXML中有特殊意义的字符的话,请转换成 < 的形式。至于每个符号的编码是怎么样的,请打开DreamWeaver,在代码编辑器中输入&,然后查看代码提示,方便又快捷!
三.DataGrid的labelFunction。我需要在DataGrid中现实时间,但是后台传回的是格林威治时间,很长,我得需要格式化,这就要用到 labelFunction 属性。这个属性的值是一个函数,这些都在帮助文档中有说明,我就不多说了,我想说的是如何用这个东西。先说一下这个函数需要的两个参数:item:类型Object,column:类型DataGridColumn。其中item保存的是显示在DataGrid中的每一个对象的引用,而column表示的就是当前列,这个column好像没什么用。我一直以为必须要用到column才可以,结果总是显示错误。最后终于成功。代码如下:
private function formatLabel(item:Object,column:DataGridColumn):String
{
return df.format(item.dates);// df是一个DateFormatter,item中
//的dates放的是格林威治时间
}
这几天学会的技巧主要就是这些,都是花了不少时间才学会的。以后遇到类似问题就顺手多了。
补充一点:DataGrid的dataProvider是一个ArrayCollection。当你为DataGrid设定dataProvider的时候可能会给它一个对象数组,但是当你操作的时候要记住,dataProvider不再是对象数组了,你必须把它作为ArrayCollection来操作。List控件估计也是一样,我没有试过。