2012-07-11 79 views
0

我有一个列表将布局设置为水平显示。Flex 4.6移动横向列表:Reload itemRenderer

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

对列表中的数据提供程序是

[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="&lt;" paddingLeft="20"/> 
      <s:Spacer width="100%"/> 
      <s:Label fontWeight="bold" text="{data.status}"/> 
      <s:Spacer width="100%"/> 
      <s:Label fontWeight="bold" text="&gt;" 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并且应该加载它们各自的内容。例如,“已批准”页面将使用acPages上指定的data.method显示其自己的数据。然后mss.loadDgrid将发送HTTPRequest到web服务并返回结果。

目前,发生了什么,该列表将首先正确显示Approved数据,一旦向左滑动显示下一页(待定页面),该页面将呈现所需数据。但是,当我滑回到前一页(已批准页面)时,DataGrid正在显示待定页面中的数据。我在想它应该重新加载,但事实并非如此。这适用于其余的页面。

我试过useVirtualLayout设置为falsetrue,但似乎没有什么解决。我也已经覆盖set Data函数以及收听itemRendererdataChange(),但它仍不会重新加载。

我现在想要的是在每次刷卡时,itemRenderer将刷新并获取所需的数据。

我是Flex的新手,所以可能是我用的方法是错误的。期待您的帮助。

感谢, 杰森

回答

0

这是的itemRenderer刷新问题。你可能对下面一起来看看:

Invalidating a Spark List Component to Redraw All Item Renderers

什么是把所有的数据acPages ArrayCollection的原因?也许,您可以创建7个arraycollection来保存数据,然后在需要时将其分配给acPages。

+0

我仍然无法完成它。基本上我想实现的就像Android的ViewPager组件所做的一样。 – jason 2012-07-20 07:06:50