0

レイアウトを水平表示に設定しているリストが1つあります。

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

表示されるのは、リストに基づいて7ページが表示され、acPages ArrayCollectionユーザーがリストを左右にスワイプして次/前のページに移動できることです。各ページにはDataGridがあり、それぞれのコンテンツをロードする必要があります。たとえば、[承認済み]ページには、にdata.method割り当てられたを使用して独自のデータが表示されacPagesます。次に、はWebサービスmss.loadDgridにを送信しHTTPRequest、結果を返します。

現在、何が起こっているのか、リストには最初に承認済みデータが正しく表示されます。左にスワイプして次のページ(保留中のページ)を表示すると、ページは必要なデータで適切にレンダリングされます。しかし、前のページ(承認済みページ)にスワイプして戻ると、DataGridは保留中のページのデータを表示しています。リロードして戻すべきだと思っていましたが、そうではありません。これは残りのページに適用されます。

useVirtualLayoutセットfalseを試してみましたtrueが、何もうまくいかなかったようです。私はまた、set Data機能を上書きし、リッスンしていましdataChange()itemRendererが、それでもリロードされません。

私が今欲しいのは、スワイプするたびに、itemRendererが更新され、目的のデータを取得します。

私はFlexの初心者なので、使用したアプローチが間違っている可能性があります。あなたの助けを楽しみにしています。

ありがとう、ジェイソン

4

1 に答える 1

0

これは itemrenderer の更新の問題です。あなたは次のことを見ているかもしれません:

すべてのアイテム レンダラーを再描画するための Spark List コンポーネントの無効化

すべてのデータを acPages arraycollection に入れる理由は何ですか? おそらく、7 つの arraycollection を作成してデータを保持し、必要に応じて acPages に割り当てることができます。

于 2012-07-12T17:14:22.487 に答える