创建动态Flex自定义ItemRender(构造函数)

时间:2009-09-04 10:16:24

标签: actionscript-3 actionscript flex3 itemrenderer

正在创建一些带有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。

有没有人知道是否有替代解决方案来解决问题?

先谢谢你的帮助,

关心哈维尔

3 个答案:

答案 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>