Error 1009 with custom ItemRenderer in TileList


 

pretty new flex.  i'm testing 2 components, datagrid , tilelist, using same custom itemrenderer.  datagrid works fine.  tilelist returns error #1009:
]error #1009: cannot access property or method of null object reference.
    @ components::bridgerenderer/set data()[c:\flextrain\bridgedemo\src\components\bridgerenderer.mxml:36]
    @ mx.controls.listclasses::tilebase/getprepareditemrenderer()[c:\autobuild\3.2.0\frameworks \projects\framework\src\mx\controls\listclasses\tilebase.as:575]
    .....etc, etc.....
 

 

the itemrenderer in case, set display 1 image if loads fine (can found) , generic image if nothing found.

 

first, renderer:
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:vbox xmlns:mx="http://www.adobe.com/2006/mxml"
    horizontalalign="center"
    initialize="init()">
   
    <mx:script>
        <![cdata[
           
            import valueobjects.bridge;
            import flash.net.urlloader;
           
            [bindable]
            private var imagepath:string;
           
            private var loader:urlloader;
           
            private function init():void{
                loader = new urlloader();
                loader.addeventlistener(event.complete, loaderhandler);
                loader.addeventlistener(ioerrorevent.io_error, ioerrorhandler);
            }
           
            private function loaderhandler(success:string):void{
                if (success){
                    imagepath = "assets/bridgeimages/" + data.bridgeid + "_sm.jpg";
                }
            }
           
            private function ioerrorhandler(event:ioerrorevent):void{
                imagepath = "assets/bridgeimages/empty.png";
            }
           
            override public function set data(value:object):void{
                super.data = value;
                var requesturl:urlrequest = new urlrequest("assets/bridgeimages/" + data.bridgeid + "_sm.jpg");
                loader.load(requesturl);
            }
        ]]>
    </mx:script>
   
    <mx:image
        height="48"
        source="{imagepath}"/>
    <mx:label text="{data.name}" />
       
   
</mx:vbox>
[/code]

 

the custom tilelist control:
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:panel xmlns:mx="http://www.adobe.com/2006/mxml"
    label="pic query - tl">
   
    <mx:metadata>
        [event(name="selectbridgeevent", type="events.bridgeevent")]
    </mx:metadata>

 

    <mx:script>
        <![cdata[
            import events.bridgeevent;
            import valueobjects.bridge;
            import mx.events.listevent;
            import mx.collections.arraycollection;
           
            [bindable]
            public var tilelistdata2:arraycollection;
           
            private function itemclickhandler(event:listevent):void{
                var bridgedata:bridge;
                bridgedata = event.itemrenderer.data bridge;
                var bridgeeventobject:bridgeevent = new bridgeevent("selectbridgeevent", bridgedata);
                dispatchevent(bridgeeventobject);
            }
           
        ]]>
    </mx:script>

 

    <mx:tilelist
        dataprovider="{tilelistdata2}"
        itemrenderer="components.bridgerenderer"
        itemclick="itemclickhandler(event)"/>

 

 

 

</mx:panel>[/code]

 

just compare, datagrid (which uses same code, same itemrenderer w/no problems...)
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:panel xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical"
    label="quick search">
   
    <mx:metadata>
        [event(name="selectbridgeevent", type="events.bridgeevent")]
    </mx:metadata>
       
    <mx:script>
        <![cdata[
           
            import events.bridgeevent;
            import valueobjects.bridge;
            import mx.events.listevent;
            import mx.collections.arraycollection;
           
            [bindable]
            public var griddata:arraycollection;
           
            private function itemclickhandler(event:listevent):void{
                var bridgedata:bridge;
                bridgedata = event.itemrenderer.data bridge;
                var bridgeeventobject:bridgeevent = new bridgeevent("selectbridgeevent", bridgedata);
                dispatchevent(bridgeeventobject);
            }
        ]]>
    </mx:script>
   
       
    <mx:datagrid id="allbridgesgrid"
                dataprovider="{griddata}"
                itemclick="itemclickhandler(event)"
                width="100%">
                <mx:columns>
                    <mx:datagridcolumn datafield="name"
                         headertext="name"/>
                    <mx:datagridcolumn datafield="statename"
                         headertext="state"
                         width="100"/>
                    <mx:datagridcolumn datafield="worldguidenum"
                         headertext="world guide number"/>
                </mx:columns>
            </mx:datagrid>
</mx:panel>
[/code]

 

 

 

both of these controls instantiated in main app as:

 

[code]<comp:bridgedatagrid
                 id="smbridgeimages"
                 tilelistdata="{bridgedata}"
                 selectbridgeevent="selectbridgeeventhandler(event)"/>
       
            <comp:bridgetilelist
                id="testtilelist"
                tilelistdata2="{bridgedata}"
                selectbridgeevent="selectbridgeeventhandler(event)"/>

 

bridgedata on main app page as:
[bindable]
private var bridgedata:arraycollection;

 

[/code]



More discussions in Flex (Read Only)


adobe

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts