Flex itemRenderer 内联渲染器


1.需要理解的概念。  要理解 itemRenderer, 您必须理解它们为何变成现在这样以及我们当初设计它们时的目的。在此, 当我用到“我们”时, 我指的是 Adobe Flex 设计小组。我与它没有关系。言归正传, 假设您要显示 1,000 条记录。如果您认为列表控制会创建 1,000 个 itemRenderer, 您就错了。如果列表只显示 10 行, 它会创建约 12 个 itemRenderer-这些足以显示各个可见行, 多出的几个则用于缓冲和性能。列表最初显示行 1–10。当用户滚动这个列表时, 它现在可能显示行 3-12。但那 12 个 itemRenderer 仍在那里: 及时滚动列表后, 也不会新建任何 itemRenderer。

以下是 Flex 执行的操作。滚动列表时, 那些依然显示相同数据 (行 3-10) 的 itemRenderer 将向上移动。它们并未发生任何变化, 只是移到了新位置。之前显示行 1 和 行 2 数据的 itemRenderer 现在移到行 10 的 itemRendere 下。然后, 为那些 itemRenderer 提供行 11 和 行 12 的数据。换言之, 除非您调整列表大小, 否则将重用/循环使用那些相同的 itemRenderer-它们只是移到新位置并且现在显示新数据

内联 itemRenderer 直接写入 MXML 文件中列表控制出现的位置。内联 itemRenderer 最简单, 一般用于十分简单的渲染器或用于为较大的应用程序构建原型。内联 itemRenderer 本身并没有问题, 但随着代码变得复杂, 最好将它提取到自己的类中.

2.下面是一个tileList的内置渲染器的例子。这个例子中的<fx:Script>将checkbox的状态信息写入了绑定的数组fields,用于后面获取信息。

<mx:TileList id="tilelist_field"
columnWidth
="100"
dataProvider
="{fields}"
borderVisible
="false"
height
="{hGroup_middle.height-25}"
width
="100%">
<mx:itemRenderer>
<fx:Component>
<mx:HBox horizontalAlign="left"
horizontalScrollPolicy
="off">
<fx:Script>
<![CDATA[
protected function checkbox1_clickHandler(event:MouseEvent):void
{
data.selected=(event.target as CheckBox).selected;
}
]]>
</fx:Script>

<mx:CheckBox height="18"
label
="{data.name}"
click
="checkbox1_clickHandler(event)"
selected
="{data.selected}"
toolTip
="{data.name}"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:TileList>


 

3.也可以将内联 itemRenderer 用于 DataGrid。以下是应用于列的一个示例,本例中的 <mx:Script>

    用于覆盖 set data 函数, 使得 itemRenderer 的背景色可以更改。

 

<mx:DataGrid x="29" y="303" width="694" height="190" dataProvider="{testData.book}" variableRowHeight="true">
<mx:columns>
<mx:DataGridColumn headerText="Pub Date" dataField="date" width="85" />
<mx:DataGridColumn headerText="Author" dataField="author" width="125"/>
<mx:DataGridColumn headerText="Title" dataField="title">
<mx:itemRenderer>
<mx:Component>
<mx:HBox paddingLeft="2">
<mx:Script>
<![CDATA[
override public function set data( value:Object ) : void {
super.data = value;
var today:Number = (new Date()).time;
var pubDate:Number = Date.parse(data.date);
if( pubDate > today ) setStyle("backgroundColor",0xff99ff);
else setStyle("backgroundColor",0xffffff);
}
]]>
</mx:Script>
<mx:Image source="{data.image}" width="50" height="50" scaleContent="true" />
<mx:Text width="100%" text="{data.title}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>

 

4.<mx:Component> 被视为外部定义类。

  从 <mx:Component> 中定义的变量仅作用于那个组件/内联 itemRenderer。

  同样, <mx:Component> 外的内容在不同的作用范围内, 就像这个组件是在另一个文件中定义的那样。
  outerDocument 标识符将作用范围更改为查找文件或外部文档, 并引用 <mx:Component>

 

本文摘自:http://www.adobe.com/cn/devnet/flex/articles/itemrenderers_pt1.html

 

posted @ 2011-10-03 00:04  JackGIS  阅读(1248)  评论(0编辑  收藏  举报