我在Flex中有一个包含一些数据的HorizontalList和一个表示Page的ItemRenderer。在列表中的最后一个项目(页面)之后,我想要一个按钮 - 一个Plus来创建一个新页面。
我可以查看哪些数据来获取最后一个ItemRenderer的正确x,y位置?
我的位置this.listContent.listItems[this.listContent.listItems.length-1];
它给了我正确的ItemRenderer instanceBut,但它的x和y已被用于列表中ItemRenderer的索引位置。我想要相对于列表本身的像素,所以我可以在UpdateDisplayList()中定位一个按钮。
我有兴趣通过UIComponent覆盖而不是通过ItemRenderer本身来做这件事,因为它似乎不应该存在于dataProvider中......它需要是一些奇怪的“lastItem”对象ItemRenderer寻找并且看起来很奇怪。另外,对于一般的列表来说,这是一个非常有用的功能。
那么,关于这个或其他方法的任何想法?
答案 0 :(得分: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>
答案 1 :(得分:0)
使用itemEditor可能有正确的方法,但我会尝试这样的事情:
答案 2 :(得分:0)
我认为您可以尝试向dataProvider添加一个项目(使用数据,例如“button”),并为列表创建自定义itemRenderer,如果data ==“button,将其外观更改为Button(可以使用状态实现) “
答案 3 :(得分:0)
在列表中 - 添加一个事件creationComplete - 并在其实现中 - 在列表中添加另一个项目,比如使用某个字符串将其推迟到之前的项目。在您的项目渲染器标记中添加此属性:
currentState="{data.sname == '%your string%' ? 'last' : 'normal'}"
然后,当然,添加2个状态:
<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"/>
希望它有所帮助!