关于Flex itemRenderer的理解
最近开始接触flex了,as的语法类java也类Delphi,总体来说还是比较好学的。今天下了个皮肤,试着写点静态的UI,以便尽快熟悉flex的控件。
flex使用类html的标记语言mxml,对于熟悉web开发的程序员来说并不难接受。不过还是有其特殊之处,比如itemRenderer。通过其可以对datagrid、list等控件自定义每个单元格的内容,而不仅仅局限于文本格式。首先还是来看个列子:
<mx:DataGridColumn width="60" headerText="相关操作"><mx:itemRenderer><mx:Component><mx:HBox horizontalAlign="center"><mx:Script><![CDATA[import net.itcpn.util.PopUtil;private function ltnIPClick():void{var obj:Object=new Object();obj["ParentWindow"]=outerDocument;obj["data"]=data; PopUtil.showCenterWindow(outerDocument,SiteDetails, true, data.siteName+"详情",obj);}]]></mx:Script><mx:LinkButton label="详情" color="#0000FF" fontWeight="bold" click="ltnIPClick();"/></mx:HBox></mx:Component></mx:itemRenderer></mx:DataGridColumn>
上面是DataGrid中的一列,<mx:itemRenderer> 标记定义了一个内联的itemRenderer,<mx:Component> 是为了提供一个 MXML 语法, 用于在代码中创建一个 ActionScript 类。当您查看内联 itemRenderer 时, 它看上去就像一个完整的 MXML 文件,有根标记 (本例中为 <mx:HBox>), 甚至 <mx:Script> 块。但是如果你将方法ltnIPClick()定义到文件的scrit块儿中就会发现在itemRenderer中调用时会报错,提示找不到该方法。因为此时ltnIPClick()是在文件作用范围内定义的,而不是在<mx:Component>中。这个问题也让我迷惑了很久,不过从上面itemRenderer的原理来考虑的话就不难理解了,因为<mx:Component>中的内容可以认为是一个单独的文件,作用范围不同,当然我们可以在<mx:Component>中使用形如outerDocument.ltnIPClick()的方式来调用文件中统一定义的函数,不过这个函数必须是public的,受保护或私有的都不行。
flex的控件很有趣,也很丰富,在没有网速瓶颈的情况下,flex版本的网站确实很震撼,这也许就是互联网应用未来发展的趋势吧。
推荐一个集成各种flex组件例子的网站,http://www.adobe.com/devnet/flex/tourdeflex/web/#