我有一个列表,其布局设置为水平显示。
<s:List id="pagedList"
width="100%" height="100%"
verticalScrollPolicy="off" horizontalScrollPolicy="on"
pageScrollingEnabled="true"
itemRenderer="views.component.renderer.pageListItemRenderer"
skinClass="views.component.skin.PagedListSkin"
dataProvider="{acPages}"
scrollSnappingMode="center"
interactionMode="touch"
useVirtualLayout="true">
<s:layout>
<s:TileLayout orientation="rows" requestedRowCount="1"
columnWidth="{pagedList.width}" rowHeight="{pagedList.height}"
verticalGap="0" horizontalGap="0" />
</s:layout>
</s:List>
列表的dataProvider是
[Bindable]
private var acPages:ArrayCollection =
new ArrayCollection( [
{status:"Approved", method:"findRange(0,10)"},
{status:"Pending", method:"findRange(10,20)"},
{status:"Draft", method:"findRange(20,30)"},
{status:"Ready", method:"findRange(30,40)"},
{status:"Cancelled", method:"findRange(40,50)"},
{status:"Recommended", method:"findRange(50,60)"},
{status:"Resubmitted", method:"findRange(60,70)"}
]);
最后是itemRenderer
<fx:Script>
<![CDATA[
override public function set data(value:Object):void
{
super.data = value;
if (value== null)
return;
if (data.status)
mss.loadDgrid(data.method);
}
]]>
</fx:Script>
<s:Group width="100%" height="100%">
<s:layout>
<s:VerticalLayout gap="0" verticalAlign="middle" horizontalAlign="center" paddingBottom="30"/>
</s:layout>
<s:Group width="100%" contentBackgroundColor="0x000001">
<s:layout>
<s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>
</s:layout>
<s:Label fontWeight="bold" text="<" paddingLeft="20"/>
<s:Spacer width="100%"/>
<s:Label fontWeight="bold" text="{data.status}"/>
<s:Spacer width="100%"/>
<s:Label fontWeight="bold" text=">" paddingRight="20"/>
</s:Group>
<s:DataGrid id="dgTaskGrid"
width="100%" height="100%"
verticalScrollPolicy="on"
dataProvider="{mss.dataProvider}">
<s:columns>
<s:ArrayList>
<s:GridColumn headerText="Application ID" dataField="phId" />
<s:GridColumn headerText="Status" dataField="phAppStatus" />
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:Group>
您可以看到列表将显示基于acPages ArrayCollection
的7个页面,用户可以在列表中左右滑动以转到下一个/上一个页面。每个页面都将具有DataGrid,并应加载各自的内容。例如,“已批准”页面将使用data.method
上分配的acPages
显示自己的数据。然后,mss.loadDgrid
会向网络服务发送HTTPRequest
并返回结果。
目前,正在发生的事情,列表将首先正确显示已批准的数据,一旦我向左滑动以显示下一页(待定页面),该页面将使用所需数据很好地呈现。但是,当我滑回上一页(已批准页面)时,DataGrid将显示待处理页面中的数据。我当时认为它应该重新加载但事实并非如此。这适用于其余页面。
我尝试将useVirtualLayout
设置为false
和true
,但似乎没有成功。我还有set Data
函数以及dataChange()
的{{1}},但它仍然无法重新加载。
我现在想要的是每次滑动,itemRenderer
将刷新并获得所需的数据。
我是Flex的新手,所以我使用的方法可能是错误的。期待您的帮助。
谢谢, 杰森
答案 0 :(得分:0)
这是itemrenderer刷新问题。您可以查看以下内容:
Invalidating a Spark List Component to Redraw All Item Renderers
将所有数据放入acPages arraycollection的原因是什么?也许,您可以创建7个arraycollection来保存数据,然后在必要时将其分配给acPages。