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
Post a Comment