In my blog I say that if you have lots of renderers or otherwise need speed and small size, AS is the way to go unless you have some really complex layout and only a few renderer instances.
However, even if you start with MXML, your script block should mimic the AS patterns of handling the data object. In this case, the alternative is to call invalidateDisplayList when the data changes, and fix things up in updateDisplayList being careful that data could be null. The docs on custom item renderers in actionscript show the pattern. -Alex ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Ben Marchbanks Sent: Friday, June 01, 2007 3:11 PM To: [email protected] Subject: Re: [flexcoders] Re: [SOLVED] itemRenderer null object error So what would be an alternative ?? Is it best practice to create IRs using AS3 ? I am all for whatever works consistently. If I am pushing the envelop trying to use an MXML component as an Item Renderer and adding events to produce dynamic styles and object then by all means somebody save me ! Alex Harui wrote: > I'd be careful about using "render" it can get called often. Always > assume that data could be null. > > > > -Alex > > > > ________________________________ > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > Behalf Of Aaron Wright > Sent: Friday, June 01, 2007 8:41 AM > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > Subject: [flexcoders] Re: [SOLVED] itemRenderer null object error > > > > Maybe I've a little naive but I like making nearly everything in > actionscript 3, especially itemRenderers. Then, you can handle all the > positioning and styles in the updateDisplayList function if you want. > This generally follows the Adobe approach to it as well. I say start > with looking over Adobe code for itemRenderers, and see where you need > to add your code to make it do what you want. > > In the end you avoid listening for events, and not knowing what event > is going to fire in what occasion. > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > , Ben Marchbanks <[EMAIL PROTECTED]> wrote: >> After experimenting I found the solution was to change the event > trigger from >> "initialize" to "render". >> >> Happy to have resolved the problem but still puzzled why > "initialize" worked for >> one itemRenderer and not the other since from all appearances the >> implementations are identical ??? >> >> >> >> pdflibpilot wrote: >>> I am so happy I was able to create an itemRenderer with an > initialize >>> event that dynamically set the style for each item based on the > source >>> data. This worked flawlessly for one HorizontalList ( List A) so I >>> tried to implement the same on a TileList (List B) on the same > layout. >>> They have virtually the same dataProvider - List B items are >>> originally drag/dropped to List A. >>> >>> These list are nearly identical in every way yet when the event > fires >>> for the itemRenderer in List B it fails with "null object" error. It >>> seems that the data is not available when the event dispatches. I am >>> at a loss as to why it works for one list and not the other. The > data >>> used by the event is not null when it renders since all the items >>> (data) are accounted for. >>> >>> here my itemRenderer code that works - >>> >>> <?xml version="1.0" encoding="utf-8"?> >>> <!-- itemRenderers\navScreenRender.mxml --> >>> >>> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > <http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > " >>> width="200" >>> height="200" >>> horizontalScrollPolicy="off" >>> verticalScrollPolicy="off" >>> borderStyle="solid" backgroundImage="assets/images/{data.imageID}" >>> alpha="1.0" backgroundAlpha="1.0" borderColor="#333333"> >>> >>> <mx:Script> >>> <![CDATA[ >>> >>> private function setContentButton(event:Event,V):void{ >>> var e = event.currentTarget >>> if(V==''){ >>> e.styleName = 'customcontentbuttonOff' >>> e.alpha = 1.0 >>> e.toolTip = "Content Editor is not enabled for this screen - click >>> to complete the setup" >>> } >>> else if(V!="(preset)"){ >>> e.styleName = 'customcontentbuttonOn' >>> e.alpha = 1.0 >>> e.toolTip = "Content Editor is enabled for this screen - click to >>> change the setup" >>> } >>> else if(V=="(preset)"){ >>> e.alpha = 0.0 >>> } >>> } >>> ]]> >>> >>> </mx:Script> >>> <mx:Text id="layoutLabel" text = "{data.label}" >>> fontSize="8" >>> color="#ffffff" >>> textAlign="center" >>> letterSpacing="0" >>> horizontalCenter="0" verticalCenter="-38"/> >>> <mx:Image source = "assets/images/{data.imageID}" >>> toolTip="{data.description}" >>> scaleContent="false" alpha="1" >>> visible="false"/> >>> <mx:Button label="{data.displaySeq-0+1}" width="25" height="20" >>> cornerRadius="12" styleName="adminbutton" fontWeight="bold" >>> fontSize="9" verticalCenter="20" horizontalCenter="0"/> >>> <mx:Button id="contentButton" >>> initialize="{setContentButton(event,data.contentLocation)}" >>> label="C" width="18" height="18" >>> cornerRadius="12" >>> styleName="customcontentbuttonOff" >>> fontWeight="bold" fontSize="10" >>> verticalCenter="-1" horizontalCenter="0" >>> alpha="1.0"/> >>> >>> </mx:Canvas> >>> >>> >> -- >> Ben Marchbanks >> >> ::: alQemy ::: transforming information into intelligence >> http://www.alQemy.com <http://www.alQemy.com> <http://www.alQemy.com <http://www.alQemy.com> > >> >> ::: magazooms ::: digital magazines >> http://www.magazooms.com <http://www.magazooms.com> <http://www.magazooms.com <http://www.magazooms.com> > >> >> Greenville, SC >> 864.284.9918 >> > > > > -- Ben Marchbanks ::: alQemy ::: transforming information into intelligence http://www.alQemy.com <http://www.alQemy.com> ::: magazooms ::: digital magazines http://www.magazooms.com <http://www.magazooms.com> Greenville, SC 864.284.9918

