2009-04-11 69 views
1

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

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

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

这给了我正确的ItemRenderer instanceBut的位置,但它的X和Y已经用于ItemRenderer的列表中的索引位置。我想要像素相对于列表本身,所以我可以在UpdateDisplayList()中定位一个按钮。

我感兴趣的是通过UIComponent覆盖来代替通过ItemRenderer本身,因为它看起来不像是应该存在于dataProvider中的东西......它需要是一些奇怪的“lastItem” ItemRenderer寻找的对象并且看起来很奇怪。另外,这对列表来说是一个相当有用的函数。

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

回答

0

很难抓住最后一个对象的实际itemRenderer,因为itemRenderer被重用,所以很难确定哪一个总是最后一个。在数据中检查“lastItem”变量可能是最简单的实现方法。

但是,您可以使用带有inline itemRenderer的outerDocument属性。这使您可以访问列表。

<mx:List> 
    <mx:itemRenderer> 
     <mx:Component> 
      <ns1:MyRenderer addLastButton="{outerDocument.myList.dataProvider.index == 10}"/> 
     </mx:Component> 
    </mx:itemRenderer> 
... 
</mx:List> 
+0

即使itemRenderer被重用,该列表仍然会知道某个特定的itemrenderer是否正在显示列表中的最后一个项目。不过,从我的观点来看,最大的问题是我无法获得任何itemrenderer的本地X,Y.如果可以的话,我觉得它会基本解决。 – 2009-04-12 18:49:58

+0

我不明白你需要本地的X和Y。理论上可以采取列表的尺寸,除以显示的项目,并插入最后一个项目的位置。 – CookieOfFortune 2009-04-12 22:58:52

0

有可能使用itemEditor做的正确的方式,但我会尝试这样的事:

  1. 添加一个额外的空对象到列表中的每个数据刷新时间。
  2. 有一个itemRenderer覆盖设置的数据,如图所示here它检查对象是否为null,如果是,则将可绑定布尔值isAddable设置为true。
  3. 此布尔值控制textInput,标签和按钮的visibility和includeInLayout propertys。
  4. 当按钮发出一个事件时,通过一些验证将新项目添加到列表中。
0

我想你可以尝试多了一个项目添加到数据提供程序(用数据,例如“按钮”),并创建自定义项渲染,将其外观更改为按钮列表(可以用状态来实现的),如果数据= =“按钮”

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"/> 

希望它有帮助!

相关问题