2013-03-11 35 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