2010-04-06 4 views

उत्तर

5

आप पेड़ की labelField संपत्ति का उपयोग कर सकते हैं ताकि यह निर्धारित किया जा सके कि आप प्रत्येक नोड के लिए कौन सी संपत्ति बनना चाहते हैं।

<mx:Tree id="tree" dataProvider="{ac}" labelField="item" /> 

ये लिंक आप बाहर की मदद करनी चाहिए:


अपने उदाहरण में, यह आप एक ही स्तर के Tree देना होगा

संपादित करें:ArrayCollection आपने बनाए गए ऑब्जेक्ट्स जिनमें से प्रत्येक आइटम के साथ मिलान समूह हैं। यदि आप Tree का उपयोग करना चाहते हैं, तो आपको ऊपर से नीचे तक, श्रेणीबद्ध रूप से सोचने की आवश्यकता है।

शीर्ष-वस्तुएं आपके "समूह" होंगी, जिसमें "आइटम" का प्रतिनिधित्व करने वाली वस्तुओं शामिल हैं। आपके ArrayCollection में, प्रत्येक इंडेक्स को Object होना चाहिए, जो बदले में, किसी भी घोंसले वाले बच्चे होते हैं। कृपया ध्यान दें: प्रत्येक ऑब्जेक्ट में अपने घोंसले वाले बच्चों को "बच्चों" नाम की संपत्ति में निर्दिष्ट किया जाना चाहिए।

{name: "Animals", children: new ArrayCollection([ {name: "Dog"}, {name: "Cat"} ])} 

यह `वस्तु इस प्रकार पदानुक्रम संरचित है:

वस्तु:

उदाहरण के लिए

पशु
|
| - बच्चे
          |
          कुत्ता
          |
          बिल्ली

यहाँ से, Dog और Cat वस्तुओं भी एक children संपत्ति अभी तक एक और ArrayCollection इंगित करता हो सकता है। इसका कोई मतलब भी है क्या?

ध्यान दें कि प्रत्येक ऑब्जेक्ट में समान पहचानकर्ता कैसे होता है। इस मामले में, मैंने लेबल के लिए "नाम" का उपयोग किया जो Tree में प्रदर्शित किया जाएगा। आप labelFunction प्रॉपर्टी का उपयोग ऐसे फ़ंक्शन को परिभाषित करने के लिए भी कर सकते हैं जो String लौटाता है और इस प्रकार यह निर्धारित कर सकता है कि दिए गए नोड के लिए लेबल रन-टाइम पर क्या है।

मैंने अपना ArrayCollection लिया और इसे एक साधारण एप्लिकेशन में बंडल किया जो इसे Tree के रूप में प्रदर्शित करता है।

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     [Bindable] public var ac:ArrayCollection= new ArrayCollection([ 
      { name: "Animals", children: new ArrayCollection([ {name: "dog"}, {name: "cat"}])}, 
      { name: "Fruits", children: new ArrayCollection([ {name: "orange"}, {name: "apple"} ])}]); 

    ]]> 
</mx:Script> 
<mx:Tree dataProvider="{ac}" labelField="name" /> 

+0

मैंने कोशिश की लेकिन यह केवल आइटम सूचीबद्ध करता है। मैंने लेबल फ़ील्ड = "समूह" सेट करने का प्रयास किया लेकिन केवल समूहों को सूचीबद्ध किया (उन्हें बच्चों के रूप में आइटम के साथ क्लिक करने योग्य नोड्स में नहीं बनाया गया)। मैं आपके द्वारा पोस्ट किए गए लिंक देखूंगा। – jtorrance

+1

ध्यान में रखना एक बात है, आपके पास घोंसला वाली ऑब्जेक्ट संरचना नहीं है (यानी वस्तुओं को एम्बेडेड w/ऑब्जेक्ट्स में)। नतीजतन, आपका "पेड़" फ्लैट दिखाई देगा क्योंकि इसमें केवल एक स्तर है। मेरे द्वारा पोस्ट किए गए उदाहरण दिखाते हैं कि ऑब्जेक्ट्स में ऑब्जेक्ट्स को घोंसला कैसे करें ताकि आपको पदानुक्रमित दृश्य मिल सके। – bedwyr

+0

क्या वे वास्तव में दिखाते हैं कि फ्लैट/समूहित डेटा से पदानुक्रमित संरचना कैसे उत्पन्न करें? पहला लिंक सिर्फ (कृत्रिम रूप से) सरणी में "बच्चों" नोड्स को जोड़ता है, जबकि दूसरा श्रेणीबद्ध रूप से संरचित ऐरेकोलेक्शन का निर्माण करके शुरू होता है। क्या मैं कुछ भूल रहा हूँ? – jtorrance

1

मैं इस तरह से इस्तेमाल किया है और मेरे लिए काम करता है: a link!

<?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" 
creationComplete="windowedapplication1_creationCompleteHandler(event)" xmlns:local="*" 
width="318" height="400"> 
<s:layout> 
    <s:VerticalLayout/> 
</s:layout> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.CollectionEvent; 
     import mx.events.FlexEvent; 

     protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
     { 
      refreshTree();  
     } 

     private function refreshTree():void{ 
      gc.refresh(); 
      myTree.dataProvider = gc.getRoot(); 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 

    <s:ArrayCollection id="arcData"> 
      <local:TestItem year="2009" month="Jan" label="Jan Report 1"/> 
      <local:TestItem year="2009" month="Jan" label="Jan Report 2"/> 
      <local:TestItem year="2009" month="July" label="July Report 1"/> 
      <local:TestItem year="2009" month="July" label="July Report 2"/> 
      <local:TestItem year="2010" month="Feb" label="Feb Report 1"/> 
      <local:TestItem year="2010" month="Feb" label="Feb Report 2"/> 
      <local:TestItem year="2010" month="Dec" label="Dec Report 1"/> 
      <local:TestItem year="2010" month="Dec" label="Dec Report 2"/> 
    </s:ArrayCollection> 

    <mx:GroupingCollection2 id="gc" source="{arcData}"> 
     <mx:grouping> 
      <mx:Grouping> 
       <mx:fields> 
        <mx:GroupingField name="year"/> 
        <mx:GroupingField name="month"/>  
       </mx:fields> 
      </mx:Grouping> 
     </mx:grouping> 
    </mx:GroupingCollection2> 
</fx:Declarations> 

<mx:Tree id="myTree" dataProvider="{gc.getRoot()}" labelField="GroupLabel" width="100%" height="100%"> 

</mx:Tree> 

</s:Application> 
3

आप एक फ्लैट ArrayCollection से एक पदानुक्रमित ArrayCollection उस में बच्चों नोड के साथ बना सकते हैं।

Here is a link on Adobes cookbooks.

संबंधित मुद्दे