0

mx:Tree コンポーネントでいくつかの問題に直面していたため、SparkTree (4.0) コンポーネント ( http://kachurovskiy.com/2010/spark-tree/ ) を使用しています。

私はxmllistcollectionに変換し、SparkTreeコンポーネントのdataproviderプロパティに割り当てるxmlデータを持っています。正しくレンダリングされていませんでした。その後、SparkTree コンポーネントについて投稿されたいくつかの FAQ を読んだ後、ツリーが xml/xmllist/xmlcollection ではなく arraycollection に対して理想的に動作することに気付きました。

そこで、xml データを arraycollection に変換し、SparkTree の dataprovider に割り当てました。それでも、トップ レベルのノードのみがリーフ ノードとして表示され、子ノードは表示されません。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               minWidth="955" minHeight="600"
               xmlns:sparkTree="com.sparkTree.*" >
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.collections.XMLListCollection;
            import mx.events.FlexEvent;
            import mx.rpc.xml.SimpleXMLDecoder;
            import mx.utils.ArrayUtil;

            [Bindable]
            private var dlist:XMLListCollection;

            [Bindable]
            private var dColln:ArrayCollection;

            [Bindable]
            private var dashColln:ArrayCollection; 

            [Bindable]
            private var dashListColln:ArrayCollection; 

            protected function sparkTree_creationCompleteHandler(event:FlexEvent):void
            {
                var dashList:XMLList=XMLList(testxml.children());
                var mydecoder:SimpleXMLDecoder=new SimpleXMLDecoder();
                var data:Object=mydecoder.decodeXML(new XMLDocument(dashList.toXMLString()));
                dashListColln = new ArrayCollection();
                if (data != null && data.menu.length > 0) {
                    for (var i:int=0; i<data.menu.length; i++) {
                        dashColln = new ArrayCollection(Array(data.menu[i]));
                        dashListColln.addAll(dashColln);
                    }
                }
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <fx:XML id="testxml" source="xml/Test.xml" />
    </fx:Declarations>

    <s:Panel width="75%" height="75%" horizontalCenter="0" verticalCenter="0">
        <sparkTree:Tree id="sparkTree" 
                        dataProvider="{dashListColln}"
                        creationComplete="sparkTree_creationCompleteHandler(event)"
                        width="100%"
                        height="100%"
                        textRollOverColor="yellow" 
                        textSelectedColor="0xFFFFFF" dragEnabled="true" dropEnabled="true"
                        dragMoveEnabled="true">
            <!--<sparkTree:layout>
            <s:TileLayout horizontalGap="0" verticalGap="0" orientation="columns"/>
            </sparkTree:layout>-->
        </sparkTree:Tree>
    </s:Panel>

</s:Application>

`

   <root>

    <menu label="A">
        <menu label="A1">
             <menu label="A1.1" />
        </menu>
        <menu label="A2" >
            <menu label="A2.2"/>
        </menu>
        <menu label="A3" >
            <menu label="A3.3"/>
        </menu>
        <menu label="A4" >
            <menu label="A4.4"/>
        </menu>
    </menu>
    <menu label="B">
        <menu label="B1" />
        <menu label="B2" />
        <menu label="B3" />
    </menu>
    <menu label="C">
        <menu label="C1" />
        <menu label="C2" />
        <menu label="C3" />
    </menu>
    <menu label="D">
        <menu label="D1" />
        <menu label="D2" />
    </menu>
    <menu label="E">
        <menu label="E1" />
    </menu>

</root>

親切に、これについてあなたの考えを共有してください。arraycollection に子オブジェクトがあっても、子ノードを取得できないのはなぜですか? ここに画像の説明を入力

4

1 に答える 1

0

これを試してみてください..これはより洗練されたソリューションです...データフラットナーもあります..XMLデータのフォーマットを処理する必要がないように..

http://saturnboy.com/2011/09/spark-treelist/

于 2013-07-15T20:43:35.727 に答える