我有数据网格表,其中包含形状对象的数组。我的数据网格表中的GridColumn调用名为“MovementLogItemRenderer”的项目渲染器。如何动态更改项呈示器中的组件属性?
在我的“MovementLogItemRenderer”中,我有一个包含少量标签的HGroup。我使用itemRenderer的data属性来访问要在标签中显示的特定信息。
我想要做的是控制标签中文字的颜色。因此,当data.shapeColor的值等于“紫色”时,我想更改特定标签中文本的颜色。
当我运行该文件它不显示任何东西。整个UI不显示在浏览器上。
请问有人能告诉我这是怎么做到的?什么是适当的方法来做到这一点?
这是包含在数据网格表我的MXML文件:
<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="createShapes()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]
private var myShapes:ArrayCollection = new ArrayCollection();
import FrontEndObjects.Shapes;
private function createShapes():void{
var shape1:Shapes = new Shapes();
shape1.shapeId = "1001";
shape1.shapeName ="Rec";
shape1.shapeColor ="pink";
var shape2:Shapes = new Shapes();
shape2.shapeId = "1002";
shape2.shapeName ="Cirl";
shape2.shapeColor ="orange";
var shape3:Shapes = new Shapes();
shape3.shapeId = "1003";
shape3.shapeName ="Trig";
shape3.shapeColor ="purple";
myShapes.addItem(shape1);
myShapes.addItem(shape2);
myShapes.addItem(shape3);
}
]]>
</fx:Script>
<s:DataGrid x="52" y="105" width="378" dataProvider="{myShapes}" requestedRowCount="4">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="shapedetails" headerText="Shape details" itemRenderer="FrontEndObjects.MovementLogItemRenderer"></s:GridColumn>
<s:GridColumn dataField="shapeId" headerText="Shape Id"></s:GridColumn>
<s:GridColumn dataField="shapeName" headerText="Shape Name"></s:GridColumn>
<s:GridColumn dataField="shapeColor" headerText="Shape Colour"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
这是我的 “MovementLogItemRenderer” 项目渲染:
<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[
[Bindable] public var myTextColour:uint;
override public function prepare(hasBeenRecycled:Boolean):void {
super.prepare(hasBeenRecycled);
if(data.shapeColor == "purple"){
myTextColour = 0x7a11f1;
} else {
myTextColour = 0x000000;
}
}
]]>
</fx:Script>
<s:HGroup>
<s:Label text="{data.shapeId}" paddingTop="8"/>
<s:Label text="{data.shapeName}" paddingTop="8" />
<s:Label text="{data.shapeColor}" paddingTop="8" color="{myTextColour}" />
</s:HGroup>
嗨米莎Pooh..It还告诉不起作用。界面仍然没有显示..我做了一个MXML文件,只包含我的dataGrid来测试。我上面更新了我的代码。请看看。我做错了什么? – user2017147 2013-03-19 00:14:54
嗨,我刚刚在prepare方法中添加了一个if(数据)检查 - (请参阅上面的更新代码) - 并且您的示例适用于我 - 执行项目时是否存在运行时错误? – michaPau 2013-03-20 18:47:35
非常感谢你! :) 有效! :) nope在我的项目中没有运行时错误。 – user2017147 2013-03-21 01:34:45