2013-03-11 86 views
0

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

回答

0

的顏色屬性在ActionScript中的標籤是一個uint
所以你必須使用thi s類型
(僅在MXML中,您可以使用顏色代碼,如#000000)
並且由於您將動作腳本屬性綁定到標籤的顏色,所以必須使用uint類型
還必須將其重新設置爲在itemRenderer將被重新使用的情況下,如果條件不符合,則爲「正常」顏色。
eg

override public function prepare(hasBeenRecycled:Boolean):void { 

      super.prepare(hasBeenRecycled); 

      if(data) { 
       if(data.shapeColor == "purple"){ 
        myTextColour = 0x7a11f1; 
       } else { 
        myTextColour = 0x000000; 
       } 
      } 
     } 

爲什麼你的孔UI沒有顯示出來,它不能在沒有更多的代碼 你的爲例運行正常,當我嘗試它只是與網格部件

+0

嗨米莎Pooh..It還告訴不起作用。界面仍然沒有顯示..我做了一個MXML文件,只包含我的dataGrid來測試。我上面更新了我的代碼。請看看。我做錯了什麼? – user2017147 2013-03-19 00:14:54

+0

嗨,我剛剛在prepare方法中添加了一個if(數據)檢查 - (請參閱上面的更新代碼) - 並且您的示例適用於我 - 執行項目時是否存在運行時錯誤? – michaPau 2013-03-20 18:47:35

+0

非常感謝你! :) 有效! :) nope在我的項目中沒有運行時錯誤。 – user2017147 2013-03-21 01:34:45