条目渲染器和ClassFactory的总结

本文介绍如何在Flex中使用DataGridColumn的itemRenderer属性自定义DataGrid的单元格界面,并通过ClassFactory的properties属性实现实例化对象间的通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  游戏中时常要用到DataGrid 控件来显示二维结构的数据,为了更好的展示数据,往往需要给DataGrid 控件的单元格定制更丰富的界面,比如在一个DataGrid 的某列的单元格里添加图片、文本或下拉菜单等其他下层控件,这些下层控件我们往往需要用到DataGridColumn的 itemRenderer属性,把一个定义了这些下层控件的类、类路径或一个ClassFactory对象传到这个属性里,以得到一个自定义显示界面的列。
  ClassFactory和 DataGridColumn.itemRenderer 在里面的工作机制在这里不作重点介绍,需要介绍的则是如何使那些自定义的下层控件能与外界沟通,因为这些控件如果只能在定义它的类里面工作,就起不到更大的交互功能了。所以,如何让外界找到他们,会是一个很关键的环节。下面来看看我的做法:
  现在有已有一个DataGrid控件dg ,为了简化说明,as代码只为dg添加了一列。自定义有一个包含了需要在DataGrid控件的某列中显示的下层控件的mxml文件: MyDgColumn.mxml,一下是dg所在的mxml文件的<Script />代码片段:
[code]
<mx:Script>
……
var myDgColumn:DataGridColumn = new DataGridColumn;
var myDgFactory:ClassFactory = new ClassFactory("MyDgColumn");
myDgFactory.properties = {msg:"(*^_^*)"};
myDgColumn.itemRenderer = myDgFactory;
dg.columns = [myDgColumn];
……
</mx:Script>
[/code]

再看看 MyDgColumn.mxml 的代码:

[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:LinkButton xmlns:mx="http://www.adobe.com/2006/mxml" width="30" height="20" label="按钮" click="{onClick(event)}">
<mx:Script>
<![CDATA[
import mx.events.MenuEvent;
public var msg:String = "";
private function onClick(event:MouseEvent):void{
trace(msg);
}
]]>
</mx:Script>
</mx:LinkButton>
[/code]

  运行后点击dg列上的按钮,即可发现能够获取到 MyDgColumn.mxml 中的msg属性,这就实现了一个简单的dg与dg内部控件的交互。通过这个就可以做更复杂的代码了。这里面ClassFactory 的 properties 属性起到了很关键的作用,通过它,当ClassFactory 对象被调用了 newInstance( ) 方法,就会把properties 中相应的属性值设置给 ClassFactory将要实例花的类对象里面,以便达到同一个类生产不同对象的目的。以下是flex 中 ClassFactory的 newInstance方法的实现:
[code]
/**
* Creates a new instance of the <code>generator</code> class,
* with the properties specified by <code>properties</code>.
*
* <p>This method implements the <code>newInstance()</code> method
* of the IFactory interface.</p>
*
* @return The new instance that was created.
*/
public function newInstance():*
{
var instance:Object = new generator();

if (properties != null)
{
for (var p:String in properties)
{
instance[p] = properties[p];
}
}
return instance;
}
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值