Reputation: 74
I have a view component called viewBase where I defined a advanced datagrid with few item renderers for datagrid columns. Now I have a requirement where I need to use the same view viewBase component, but not required to use any item renderers.
Can anybody pls tell me how to override the itemrenderers which are declared in a view component?
Upvotes: 1
Views: 1211
Reputation: 1379
If you have a component ViewBase with AdvancedDataGrid, one of the renderers of which you need to make dynamic, you could do smth like in the example below (renderer for threatLevel is dynamic):
mx:Script>
import mx.collections.ArrayCollection;
import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer;
[Bindable]
public var monitoringArrayCollection : ArrayCollection;
[Bindable]
public var threatRendererClass : Class = AdvancedDataGridItemRenderer;
/mx:Script>
<mx:AdvancedDataGrid dataProvider="{monitoringArrayCollection}">
<mx:columns>
<mx:AdvancedDataGridColumn dataField="firstName" />
<mx:AdvancedDataGridColumn dataField="lastName" />
<mx:AdvancedDataGridColumn dataField="threatLevel" itemRenderer="{new ClassFactory(threatRendererClass)}" />
</mx:columns>
</mx:AdvancedDataGrid>
Then, the example of usage of such component with different renderers could be as follows:
<mx:VBox>
<components:ViewBase />
<components:ViewBase threatRendererClass="{ThreatRenderer}" />
</mx:VBox>
Where ThreatRenderer
is a custom renderer, for example:
public class ThreatRenderer extends UIComponent implements IDataRenderer, IListItemRenderer
{
private var _data : Object;
private var _dataChanged : Boolean = false;
public function get data():Object
{
return _data;
}
public function set data(value:Object):void
{
_data = value;
_dataChanged = true;
invalidateDisplayList();
}
protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (!_dataChanged || !data) return;
var g : Graphics = this.graphics;
g.clear();
g.beginFill(0xFF0000, 1);
g.drawRect(0, 0, unscaledWidth*Number(data.threatLevel)/100, unscaledHeight);
_dataChanged = false;
}
}
Upvotes: 1