Im loading in some XML data into a Spark DataGrid. Everything works properly. Now I want to add a custom itemrenderer to one of the columns. I have Flash Builder auto-generate the itemrenderer and simply run the code, but the custom item renderer throws an error. Here's all the code Im working with:
Main.mxml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="creationCompleteHandler(event)">
<fx:Declarations>
<s:HTTPService id="service" url="data.xml" resultFormat="e4x" result="resultHandler(event)" fault="faultHandler(event)"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.controls.Alert;
import spark.components.gridClasses.GridColumn;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var xml:XML;
private var xmlList:XMLList;
private var xmlListColl:XMLListCollection
protected function creationCompleteHandler(event:FlexEvent):void
{
service.send();
}
protected function resultHandler(event:ResultEvent):void
{
xml = event.result as XML;
xmlList = new XMLList(xml);
xmlListColl = new XMLListCollection(xmlList.game);
dg.dataProvider = xmlListColl;
}
protected function faultHandler(event:FaultEvent):void
{
trace("There was an error loading the XML.");
}
]]>
</fx:Script>
<s:DataGrid id="dg" width="500" rowHeight="30">
<s:columns>
<s:ArrayList>
<s:GridColumn headerText="Col1" dataField="@attr1"/>
<s:GridColumn headerText="Col2" dataField="@attr2"/>
<s:GridColumn headerText="Col3" dataField="@attr3"/>
<s:GridColumn headerText="Col4" dataField="@attr4" itemRenderer="CustomRenderer"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:Application>
CustomRenderer.mxml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
override public function prepare(hasBeenRecycled:Boolean):void {
lblData.text = data[column.dataField]
}
]]>
</fx:Script>
<s:Label id="lblData" top="9" left="7"/>
</s:GridItemRenderer>
data.xml:
Code:
<items>
<item attr1="attr1" attr2="attr2" attr3="attr3" attr4="attr4" />
<item attr1="attr1" attr2="attr2" attr3="attr3" attr4="attr4" />
<item attr1="attr1" attr2="attr2" attr3="attr3" attr4="attr4" />
<item attr1="attr1" attr2="attr2" attr3="attr3" attr4="attr4" />
<item attr1="attr1" attr2="attr2" attr3="attr3" attr4="attr4" />
</items>
So to recap, Flash Builder is generating the custom item renderer code. I didnt write anything in that class. The error thats thrown is saying that the 'data' object is null. Not sure why this is. I should be able to say data[column.dataField] or data.@attr4 to get to my data, but it keeps saying data is null.
Also, I'm using Flash Builder 4.5 with the 4.5.1 sdk. All my components are Spark components, I try to avoid MX as much as possible.
Any thoughts on whats going on or how to fix it? Thanks! :-)