zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    GOF23设计模式之建造者模式
    GOF23设计模式之工厂模式
    GOF23设计模式之单例模式
    服务端字节流输出图片
    小记常见的会话跟踪技术
    Java生成随机数的三种方式
    因为new Date(),我给IE跪了
    ionic初体验
    cordova开发环境搭建
    gradle环境搭建
  • 原文地址:https://www.cnblogs.com/tiandi/p/2198343.html
Copyright © 2011-2022 走看看