2007
08.16


有道是:"出來混的,遲早都要還的~" [原文出自-無間道],前幾天答應 Flex 班上同學要幫他在 Blog 上寫如何使用 Tree Control ,說到總是要做到,所以趕快在今天先寫一個最基礎的 Tree Control 的用法,再陸續補完使用技巧跟事件整合的部份。

說到 Controls 就會想到它的資料來源 dataProvider ,每一種 Controls 所使用的資料來源皆不相同,有的用 ArrayCollection 有的用 Object ,而 Tree 則使用了最容易表現資料樹狀結構的 XML 資料,當然其他 XML 系列的例如 XMLList 也是可以作為資料來源的,接下來我們來示範一下該如何將一個 XML 的資料當作 Tree Control 的資料來源。

tree1.gif

像是這樣的樹狀組織結構就還蠻適合用 Tree 來表示的,這時只要做一個 XML 的資料給他就可以了,你可以獨立產生一個 XML 的檔案,再從外部讀入進來,或者是直接在 Flex 中使用 <mx:XML> 標籤來描述這些資料,在這篇中我們選用 <mx:XML> 的方式來形容樹狀結構,其寫法可寫為:


 <mx:XML id="treeData">
  <node label="公司組織">
   <node label="行銷部">
    <node label="行銷處長"/>
    <node label="行銷經理"/>
       <node label="行銷專員"/>
   </node>
   <node label="資訊部">
       <node label="資訊處長"/>
       <node label="資訊經理"/>
   </node>
  </node>
    </mx:XML>

描寫完再交由 Tree 來 Binding 就可以了,怎麼樣,夠簡單吧,由於我們要取用的資料是 <node> 中的 label 屬性,所以要記得用 labelField 來指定 label 要呈現的什麼資料,資料提供方法如下:


<mx:Tree x="28" y="27" dataProvider="{treeData}" showRoot="true"
  labelField="@label" width="151" height="197"/>

完成後就有一個動態展開和收合的 Tree 可以用了,最近實在是太忙了,今天先寫到這裡下次再回頭探討 Tree 的事件。

p.s. 至少我先把債環了…. *笑*
不過還有一個多執行緒的問題還沒解答,好,下次來優先處理這個問題。


相關文章:
  • Adobe AIR在智慧型手機(iPhone Android)的應用與限制
  • 由Flex 3進入Flex 4的必備知識 PART 4 – Flash Builder的程式撰寫工具
  • Adobe Flex 4.1現身
  • Flash Builder4 文字提示功能
  • Flash Player 10.1正式版釋出
  • 本文引用:
    文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。

    11 comments so far

    Add Your Comment
    1. 老師:
      想請問一下,假設我的 xml 有三個層次以上的結構
      但我只想在 tree 中顯示 2 層就好,該如何做呢?

      查了一些資料,皆傾向用一個xml做目錄(只有二層),選取後再尋找另一個 xml 檔……

      只有這方法嗎?難道就不可以在一個 xml 中完成??

      • 自答一下 ^^
        有試 isBranch ,可行……

        但還是想說,有沒有直接鎖定「深度」的,
        即開啟兩層後,第三層往下就不開啟了(假設我的xml超過四層)

      • 你可以參考我在[Flex+AIR程式開發]這本書上的第11章,相信你應該可以在上面找到解答的方法。

    2. 抱歉…自問自答 = = … 只要下那棵樹的.dataprovider.toString() 就可以顯示整棵樹了 XD

    3. 您好,請問一下,我有一筆XML資料在資料庫裡,透過 amfphp 將資料傳出來給 Tree 顯示,並且要在上面動態新增修改刪除,然後新增修改刪除後的結果皆會回存於資料庫中,我使用的方法是將修改後整棵樹的XML存進資料庫,所以需要在新增修改刪除之後,需要整筆XML包含父節點的XML資料回存到資料庫裡,可是我在新增修改刪除後,出來的資料只有滑鼠點到該一父節點下的資料而已,並沒有完全完整顯示整棵樹的XML資料(整棵樹有二個父節點),所以我應該要怎麼把所有整棵樹的XML資料讀出來呢?謝謝 :)

    4. 您好:
      請問Flex是否可建立Thread? 在Adobe網站上找到一個利用UIComponent做的範例,但那只是利用Event,無法達到我想要的功能…

    5. 謝謝您,我再試試看!

    6. Dear nini:

      基本上你只需要在XML中在額外的描述這些資訊就可以了,所以當Tree的節點被點選到的時候,就可以用事件去觸發該執行的動作,當然也包含開視窗等行為。

    7. 說的太含糊了不好意思。表達欠佳請原諒。
      我的意思是:
      我想做一個學習樹,父節點是課程,子節點就是課程的章節,每個章節會有簡報檔、聲音檔、練習檔。若我點選這個子節點就會將這幾個檔呼叫出來。那是否就要將各個子節點分別包成不同的object,在我選取子節點的時候他就會分別開出這三個視窗,並且連結資料庫將資料讀到視窗中。

    8. Dear nini:

      抱歉,不是很清楚你的意思,是否可以再請你描述清楚一些?

    9. 可否請問您,如果將節點包成一個object來操作,屬性用object.____的方式來呈現,那要怎麼操作呢?