1

我在 Flex 中有一个 Horizo​​ntalList,其中包含一些数据和一个表示页面的 ItemRenderer。在列表中的最后一项(页面)之后,我想要一个按钮 - 一个加号来创建一个新页面。

我可以查看哪些数据来获得最后一个 ItemRenderer 的正确 x、y 位置?我得到的位置

this.listContent.listItems[this.listContent.listItems.length-1];

这给了我正确的 ItemRenderer instanceBut,但它的 x 和 y 已用于列表中 ItemRenderer 的索引位置。我想要相对于列表本身以像素为单位的东西,所以我可以在 UpdateDisplayList() 中放置一个按钮。

我有兴趣通过 UIComponent 覆盖而不是通过 ItemRenderer 本身来执行此操作,因为它似乎不应该存在于 dataProvider 中......它需要是 ItemRenderer 的一些奇怪的“lastItem”对象寻找,只是看起来很奇怪。另外,这对于一般列表来说是一个相当有用的功能。

那么,关于这种或其他方法的任何想法?

4

4 回答 4

0

很难为最后一个对象获取实际的 itemRenderer,因为 itemRenderer 被重复使用,因此很难确定哪个总是最后一个。检查数据中的“lastItem”变量可能是实现这一点的最简单方法。

但是,您可以将 outerDocument 属性与内联 itemRenderer 一起使用。这使您可以访问列表。

<mx:List>
    <mx:itemRenderer>
        <mx:Component>
            <ns1:MyRenderer addLastButton="{outerDocument.myList.dataProvider.index == 10}"/>
        </mx:Component>
    </mx:itemRenderer>
...
</mx:List>
于 2009-04-11T15:24:12.850 回答
0

使用itemEditor可能有一种正确的方法,但我会尝试这样的事情:

  1. 每次刷新数据时,都会向列表中添加一个额外的空对象。
  2. 有一个 itemRenderer 覆盖设置的数据,如此处所示它检查对象是否为空,如果是,则将可绑定的布尔值 isAddable 设置为 true。
  3. 此布尔值控制 textInput、标签和按钮的可见性和 includeInLayout 属性。
  4. 让按钮在单击时调度一个事件,将新项目添加到列表中并进行一些验证。
于 2009-05-02T18:23:33.227 回答
0

我认为您可以尝试向 dataProvider 添加一项(带有数据,例如“button”)并为列表创建自定义 itemRenderer,如果 data == “button”,它将其外观更改为 Button(可以通过状态实现)

于 2009-12-09T14:50:35.447 回答
0

在列表上 - 添加一个事件 creationComplete - 并在其实现中 - 将另一个项目添加到列表中,例如使用某些字符串将其推迟到以前的项目。在您的项目渲染器标记中添加此属性:

currentState="{data.sname == '%your string%' ? 'last' : 'normal'}"

而且,当然,添加两个状态:

<s:states><br/>
        <mx:State name="normal"/>
        <mx:State name="last"/>
    </s:states> 

之后,您可以操作渲染器,根据状态调整文本标签,例如:

<s:Label text.normal="{%whatever%}" text.last="this is the last item"/>

希望能帮助到你!

于 2011-09-21T14:35:05.427 回答