(threatLevel에 대한 렌더러는 동적) : 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>
그런 다음, 다음과 같이 서로 다른 렌더러와 같은 구성 요소의 사용의 예는 수 :
:
ThreatRenderer
예를 들어, 사용자 정의 렌더러입니다
<mx:VBox>
<components:ViewBase />
<components:ViewBase threatRendererClass="{ThreatRenderer}" />
</mx:VBox>
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;
}
}
코드를 살펴볼 수 있습니까? –
나는 당신이 무엇을 요구하고 있는지 이해하지 못합니다. 코드는 우리가 이해하는 데 도움이 될 수 있습니다. itemRenderer는 DataGrid 열의 속성이므로 다른 것을 수행하기 위해 재정의 할 수 있습니다. 그러나 itemRenderer는 DataGrid 열을 만드는 데 사용 된 구성 요소를 참조 할 수도 있습니다.이 경우 DataGrid 열을 재정의하지 않고 확장 할 수 있습니다. – JeffryHouser