I have an item renderer for a list control and I want to delegate the
editing of the object that the item renderer is showing to its
containing control - in fact to the custom control that contains the
list that the item renderer belongs to.

I have set up the item renderer inline something like this (embedded in
my custom control)[snipped for brevity]

<mx:List id="lst_Opportunities" dataProvider="{_opps}">
         <mx:itemRenderer>
             <mx:Component>
                 <ns1:my_Renderer/>
             </mx:Component>
         </mx:itemRenderer>
</mx:List>
snip...
<script>
private function handleEdit(o:Object):void
{
}
</script>

What I then did was add a public function variable, doEdit, to
my_Renderer and a handler for the double-click event which looked for
the doEdit function and called it passing the object associated with the
renderer...

(embedded in my_Renderer, which is just a canvas)
public var onEdit:function = null;
private function onDoubleClick():void
{
     if (onEdit != null) onEdit(this.data);
}

This is a pattern that I tend to use a lot in other contexts as it gives
me a great deal of flexibility in re-using code.

The trouble is that I cannot give the item renderer the function pointer
in the declaration, so this code gives a compiler error...

<mx:List id="lst_Opportunities" dataProvider="{_opps}">
         <mx:itemRenderer>
             <mx:Component>
                 <ns1:my_Renderer onEdit={handleEdit}/>
             </mx:Component>
         </mx:itemRenderer>
</mx:List>

The error is "access of undefined property handleEdit".

I'm guessing that the Component tag somehow alters the scope, but I am
wondering how to go about this.

FlexBuilder 2 - although I don't think it should matter.

TIA


Reply via email to