正在创建一些带有actionscript的高级数据网格。
我创建了一个actionscript类,我在其中扩展了VBox对象:
包核心 { import mx.containers.VBox; import mx.controls.TextInput;
公共类customItemRender扩展了VBox
{
public function customItemRender(_TextInput:TextInput,_TextInput2:TextInput)
{
// TODO:实现功能
super.addChild(_TextInput);
super.addChild(_TextInput2);
}
}
}
当我在数据网格上声明de itemrender属性时出现问题:
AdvancedDataGridColumn.itemRenderer = new ClassFactory(customItemRender(_TextInput1,_TextInput2));
编译器不会让我实现我的customItemRender。
有没有人知道是否有替代解决方案来解决问题?
先谢谢你的帮助,
关心哈维尔
答案 0 :(得分:2)
private var _ItemRendere:ClassFactory;
private function get MyItemRendere():ClassFactory
{
if (_ItemRendere == null)
{
_ItemRendere = new ClassFactory();
_ItemRendere.generator = customItemRender;
_ItemRendere.properties = {
_TextInput1:MY_TextInput1_OBJECT,
_TextInput2:MY_TextInput2_OBJECT
};
}
return _ItemRendere;
}
然后你可以使用
AdvancedDataGridColumn.itemRenderer = MyItemRendere;
答案 1 :(得分:0)
我只是尝试使用MXML来做到这一点。在这种情况下,我通常必须将IListItemRenderer实例包装在mx:Component标签中。当我这样做时,我不确定程序上会发生什么,但它确实有效。原因是itemRender实际上是在寻找一个IFactory的实例,而不是一个实例,所以我想严格使用AS来创建自己的IFactory实现。
e.g。
<mx:List>
<mx:itemRenderer>
<mx:Component>
<mx:Text />
</mx:Component>
</mx:itemRenderer>
</mx:List>
答案 2 :(得分:0)
ClassFactory的构造函数有一个Class作为参数,而不是一个实例。你需要打电话:
new ClassFactory(customItemRender);
而不是:
new ClassFactory(new customItemRender(_TextInput1,_TextInput2));
或:
new ClassFactory(customItemRender(_TextInput1,_TextInput2));
现在,由于不会引用TextInput1和TextInput2来调用构造函数,因此您需要在自定义渲染器本身中实例化您自己的TextInputs。 (但这是一件好事,如果你继续调用新的customItemRender(_TextInput1,_TextInput2),那么两个TextInputs只会被添加到customItemRender的LAST实例中,而其他所有实例都不会有这两个对象。 / p>