我有數據網格表,其中包含形狀對象的數組。我的數據網格表中的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