簡體   English   中英

Flex 4.6移動水平列表:重新加載itemRenderer

[英]Flex 4.6 Mobile Horizontal List: 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>

列表的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="&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,並應加載各自的內容。 例如,批准頁面將使用顯示自己的數據data.method分配上acPages 然后, mss.loadDgrid將向Web服務發送HTTPRequest並返回結果。

當前,正在發生的事情,列表將首先正確顯示批准的數據,一旦我向左滑動以顯示下一頁(待處理的頁面),該頁面將很好地呈現所需的數據。 但是,當我滑動回到上一頁(“批准的”頁面)時,DataGrid正在顯示掛起的頁面中的數據。 我當時認為應該重新加載,但事實並非如此。 這適用於其余頁面。

我嘗試將useVirtualLayout設置為falsetrue但似乎沒有任何結果。 我還重寫了set Data函數以及偵聽itemRenderer dataChange() ,但仍然不會重新加載。

我現在想要的是每次滑動, itemRenderer將刷新並獲取所需的數據。

我是Flex的新手,所以我使用的方法可能是錯誤的。 期待您的幫助。

謝謝,傑森

這是itemrenderer刷新問題。 您可以查看以下內容:

使Spark List組件無效以重​​畫所有項目渲染器

將所有數據放入acPages arraycollection的原因是什么? 也許,您可以創建7個arraycollection來保存數據,然后在需要時將其分配給acPages。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM