2

このようなFlex 4のコードがあります

<!-- START >>> middle part: items -->
<mx:Canvas id="itemContainer"
           width="100%"
           height="100%">
    <!-- START >>> Items Display on the page -->
    <mx:Repeater id="richTextReapeater" 
                 dataProvider="{_model.current_day.richTextNotes}">
        <components:RichTextNoteDisplay theNote="{richTextReapeater.currentItem}" />    
    </mx:Repeater>
    <mx:Repeater id="postItReapeater" 
                 dataProvider="{_model.current_day.positNotes}">
            <components:PostItNoteDisplay theNote="{postItReapeater.currentItem}"  />   
    </mx:Repeater>
    ......
</mx:Canvas>

主に、私が作成した複数のカスタム コンポーネントのリピータを内部に持つ MX:Canvas です。これらのカスタム コンポーネントのほとんどは次のようなものです。

   <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx"
                          x="{theNote.x}"
                          y="{theNote.y}"
                          width="{theNote.width}"
                          height="{theNote.height}"
                          depth="{theNote.depth}"
                          rotation="{theNote.rotation}"
creationComplete="skinnablecontainer1_creationCompleteHandler(event)" >

深さを除いて、すべて正常に動作します (x、y、幅、高さ、回転)!

親コンテナでレンダリングされた順序として表示される数に関係なく、そうです。(MX:キャンバス)!

私が達成したいのは、mx:Canvas 内のすべてのアイテムが、それらに割り当てられた「深さ」の順に表示されることです。

どうすればいいですか?

4

1 に答える 1

1

リピーターを使用しています。これは本質的にループです。

アイテムをループするように求めているように聞こえますが、それらのアイテムを別の順序で処理します。あれは正しいですか?

私の最初の推奨事項は、リピーターが「実行」される前に、dataProvider アイテムを深さでソートする方法を検討することです。

2 番目の推奨事項は、リピーターを使用しないことです。List ベースのクラスは、レンダラーのリサイクルによりパフォーマンスが向上します。

一度にすべての子を作成する必要がある場合は、ActionScript 実装に移行することをお勧めします。これにより、作成方法と作成時期をより細かく制御できます。

リピーターを利用するたびに、私は不満を感じていました。


Flex 4のリストと itemRendererに関する情報を次に示します。

これは、リピーターの代わりにリストを使用するためにこのサンプルをどのように変更するかの概算です。

    <!-- START >>> middle part: items -->
    <mx:Canvas id="itemContainer"
               width="100%"
               height="100%">
        <!-- START >>> Items Display on the page -->
        <s:List id="richTextList" 
                     dataProvider="{_model.current_day.richTextNotes}"
                     itemRenderer="com.something.myComponent">
        </s:List>
    </mx:Canvas>

itemRenderer は次のようになります。

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark">
    <s:SkinnableContainer rotation="{data.rotation}"
    creationComplete="skinnablecontainer1_creationCompleteHandler(event)" />
</s:ItemRenderer>

リストは、レンダラーの幅、x、および y の位置を決定します。ほとんどの場合、高さも決定します。ただし、Flex 3 リストにはvariableRowHeightオプションがあります。

データに基づいて別のレンダラーを使用する場合は、itemRendererFunctionの使用を検討してください。

于 2010-07-17T21:23:58.247 に答える