隨筆-348  評論-598  文章-0  trackbacks-0

          在Flex的開發中,Tree控件是比較常用的控件,Flex開發文檔為我們提供了豐富的示例,但在實際開發中,我們經常要從自己的XML文件中獲取數據,而開發文檔中這方面資料比較欠缺。

          下面我介紹一種比較有用的Tree控件開發方法。

              <mx:Tree id="MusicTypeTree"
                  left
          ="5" right="5" 
                  showRoot
          ="false"
                  labelField
          ="@label"        
                  bottom
          ="5" top="40"
                  click
          ="click(event)"/>
                  


          這是我定義的一個Tree,labelField你可以自己定義成你的XML文件中Label Attribute的Name

           <mx:HTTPService
            
          id="SrvTreeList"
            url
          ="{urlTREELIST}"
            useProxy
          ="false"
            result
          ="init()"
             resultFormat
          ="xml"
            
          />


          定義一個HTTPService,當然也可以是WebService,看你從哪里獲得數據了,切記這里的resultFormat一定要是XML,否則無法解析

          <mx:Script>
            
          <![CDATA[
             
          import mx.controls.Alert;
             
          import flash.net.URLRequest;
             
          private var XMLTreeList:XML;
             
          private var u:URLRequest;
             
          private function init():void
             
          {
              
          //先把數據取出來交給XML,再交給dataProvider,因為dataProvider不能直接解析String為XML
              XMLTreeList=XML(SrvTreeList.lastResult.toString());
              MusicTypeTree.dataProvider
          =XMLTreeList;
             }

             
             
          private function click(obj:Event):void
             
          {
              
          //如果有value屬性,也就是子node,直接打開相關頁面
              if(MusicTypeTree.selectedItem.hasOwnProperty("@value"))
              
          {
               u
          =new URLRequest(MusicTypeTree.selectedItem.@value);
               navigateToURL(u);
              }
          else{
               
          //沒有那就展開,如果展開了就收縮
               MusicTypeTree.expandItem(MusicTypeTree.selectedItem,!MusicTypeTree.isItemOpen(MusicTypeTree.selectedItem),true);
              }

             }

            ]]
          >
           
          </mx:Script>

           
          這就是上面兩個控件牽扯到的init()和click()方法的代碼,別忘了HTTPService先要在頁面加載完成后send()下,否則沒數據。init()方法讓Tree顯示出來,click方法接受事件的觸發,當然click事件可以根據程序需要進行修改。

          下面是我的XML文件

          <?xml version="1.0" encoding="utf-8"?>
          <MyMusicOnline>
              
          <node label="Piano">
                  
          <node label="Piano1" value="http://www.gcoresoft.com/"/>
                  
          <node label="Piano2"/>
              
          </node>
              
          <node label="Bass">
                  
          <node label="Bass1"/>
                  
          <node label="Bass2"/>
              
          </node>
              
          <node label="Sax">
                  
          <node label="Sax1"/>
                  
          <node label="Sax2"/>
              
          </node>
              
          <node label="Guitar">
                  
          <node label="Guitar1"/>
                  
          <node label="Guitar2"/>
              
          </node>
          </MyMusicOnline>

           

          希望我的方法對大家的開發有所幫助。



          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-04-22 20:15 TiGERTiAN 閱讀(3740) 評論(1)  編輯  收藏 所屬分類: Flex

          評論:
          # re: Flex中Tree控件的開發 2007-06-05 11:33 | fanzy
          不知道是否能講解一下:關于如何在xml中定義各節點的圖標,并實現非葉子節點與葉子節點的圖標綁定?

          E-mail:fanzy1981.126.com  回復  更多評論
            
          主站蜘蛛池模板: 溆浦县| 辽宁省| 上虞市| 武义县| 东兰县| 土默特右旗| 巴林右旗| 定襄县| 中方县| 井陉县| 东阿县| 凤山县| 水富县| 桦南县| 新和县| 巴彦淖尔市| 商丘市| 宝鸡市| 崇礼县| 静安区| 思南县| 宣恩县| 盐池县| 隆子县| 金阳县| 甘谷县| 马山县| 广河县| 岑巩县| 土默特左旗| 阜城县| 蒙阴县| 集贤县| 格尔木市| 都江堰市| 临夏县| 任丘市| 沧州市| 乌拉特前旗| 襄樊市| 喜德县|