views:

1723

answers:

3

Hi,

am creating some Advanced Datagrid with actionscript.

I have created an actionscript class where I extend the VBox object:

package core { import mx.containers.VBox; import mx.controls.TextInput;

public class customItemRender extends VBox { public function customItemRender(_TextInput:TextInput, _TextInput2:TextInput) { //TODO: implement function super.addChild(_TextInput); super.addChild(_TextInput2);
} } }

The problem comes up when I declare de itemrender property on the data grid:

AdvancedDataGridColumn.itemRenderer = new ClassFactory(customItemRender(_TextInput1,_TextInput2));

The compiler wont let me instanciate my customItemRender.

Does any one know if there is an alternative solution to solve the problem?

Thanks in advance for you helps,

Regards Javier

A: 

I've only tried to do this using MXML. In that case, i usually have to wrap the IListItemRenderer instance in mx:Component tags. I'm not exactly sure what is going on programmatically when I do this, but it works. The reason is that the itemRender is actually looking for an instance of IFactory rather than an instance so I suppose to do this strictly using AS you would need to create your own IFactory implementation.

e.g.

<mx:List>
 <mx:itemRenderer>
  <mx:Component>
   <mx:Text />
  </mx:Component>
 </mx:itemRenderer>
</mx:List>
Mims H. Wright
Hi,I know how to use it with MX tags, its as you have said, using the component tag first but my question is how to do that in as3.Regards
A: 

ClassFactory's constructor has a Class as a parameter, not an instance. You need to call:

new ClassFactory(customItemRender);

and not:

new ClassFactory(new customItemRender(_TextInput1,_TextInput2));

or:

new ClassFactory(customItemRender(_TextInput1,_TextInput2));

Now, since the constructor will not be called with reference to TextInput1 and TextInput2, you'll need to instantiate your own TextInputs in the custom renderer itself. (But this is a good thing, if you continue to call new customItemRender(_TextInput1, _TextInput2), then the two TextInputs will only be added to the LAST instance of customItemRender, and all of the others will not have these two objects ).

Christopher W. Allen-Poole
+1  A: 

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;
 }

then you can use

AdvancedDataGridColumn.itemRenderer = MyItemRendere;
Mohamed Hassan