隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

          《人人都玩開心網(wǎng):Ext JS+Android+SSH整合開發(fā)Web與移動SNS》銷售排名第4,發(fā)篇ExtJS的文章(拖放樹結(jié)點)慶祝下

              《人人都玩開心網(wǎng):Ext JS+Android+SSH整合開發(fā)Web與移動SNS》一書上架短短幾天,就進入了互動網(wǎng)計算機類銷售總排名第4的好成績(見下圖)。現(xiàn)發(fā)篇Ext JS的技術(shù)文章慶祝下。




          拖放樹結(jié)點


          在本文將介紹TreePanel組件非常有意思的一個功能:結(jié)點拖放。要使TreePanel組件的結(jié)點可以拖放非常簡單,只需要將TreePanel類的enableDD選項參數(shù)設(shè)為true即可。當然,要想實現(xiàn)更復雜的功能,還需要配合其他的參數(shù)和事件。

          一、結(jié)點拖放的位置

          拖放結(jié)點包含了兩個動作,拖(drag)和放(drop)。拖很好理解,就是將結(jié)點拖起來,拖哪一個結(jié)點的效果都是一樣的。不過放結(jié)點就比較復雜了。放結(jié)點可分為如下兩種情況:

          • 追加(append)結(jié)點:如果將拖動的結(jié)點正好放在非葉子結(jié)點的上面,TreePanel組件會將這個結(jié)點移動到非葉子結(jié)點下面作為該結(jié)點的子結(jié)點。由于TreePanel的限制,葉子結(jié)點不能append
          • 在同一層做上下移動(abovebelow): 如果將拖動的結(jié)點放在葉子結(jié)點上,或放在非葉子結(jié)點的側(cè)面,會將拖動結(jié)點作為兄弟結(jié)點來放置。

          下面的設(shè)置將TreePanel組件設(shè)為結(jié)點可拖動狀態(tài)。

          var tree = new Ext.tree.TreePanel({
              el: 'div
          -tree',
              enableDD:
          true
              loader: 
          new Ext.tree.TreeLoader()
          });

          在瀏覽器地址欄中輸入如下的URL
              http://localhost:8080/netdisk/tree/drapdrop.html
              當顯示出樹形結(jié)點時,按上面的拖動方法來拖動結(jié)點,會出現(xiàn)如圖
          1、圖2和圖3所示的拖動效果。

                  圖1
          【英語】結(jié)點將作為【計算機】的子結(jié)點

          圖2 
          【英語】結(jié)點將作為【計算機】的兄弟結(jié)點,并移到【計算機】結(jié)點的前面(above拖放)


                         圖3 
          兩個葉子結(jié)點交互位置(below拖放)

          二、使葉子結(jié)點可以append

          在默認情況下,TreePanel規(guī)定葉子結(jié)點不允許append。不管這個限制合理還是不合理,為了保持ExtJS版本的兼容性,讀者應(yīng)盡量不修改ExtJS的源代碼。不過有時需要在葉子結(jié)點上append。那么在這種情況下,我們可以通過TreePanelnodedragover事件來解決。

          TreePanel會在內(nèi)部判斷,如果結(jié)點的leaf參數(shù)為true,則會允許該結(jié)點append。了解了TreePanel禁止結(jié)點append的原理,就很容易通過nodedragover事件來解決這個問題。

          nodedragover事件方法中有一個參數(shù),通過該參數(shù)值的target屬性可以獲得拖動結(jié)點放置的目標結(jié)點。并在nodedragover方法中將該結(jié)點的leaf屬性值設(shè)為false,代碼如下:

           

          tree.on("nodedragover"function(e){
              
          var node = e.target;
              
          if(node.leaf)
                  node.leaf
          =false;
              
          return true;
          });

              在瀏覽器地址欄中輸入如下的URL:

              http://localhost:8080/netdisk/tree/leafappend.html

              顯示樹形結(jié)構(gòu)后,將某個結(jié)點拖動到葉子結(jié)點處,然后放下,就會在葉子結(jié)點下生成一個子結(jié)點,而且葉子結(jié)點的圖標會變成非葉子結(jié)點的圖標,如圖4所示。

                     圖4  使葉子結(jié)點可以append





          Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2010-08-03 14:15 銀河使者 閱讀(3681) 評論(0)  編輯  收藏 所屬分類: javaweb 原創(chuàng)移動(mobile) 圖書Android/OPhone

          主站蜘蛛池模板: 怀宁县| 巴塘县| 虎林市| 壶关县| 崇文区| 宁都县| 浦县| 武安市| 北安市| 宜君县| 时尚| 莱西市| 全南县| 荆州市| 来凤县| 大港区| 中宁县| 临潭县| 遵义县| 兖州市| 阳江市| 新昌县| 舟曲县| 巴中市| 盘锦市| 疏附县| 惠安县| 永平县| 德州市| 肃南| 安陆市| 黔南| 汪清县| 济宁市| 荔波县| 横山县| 子洲县| 扶风县| 平山县| 青龙| 吕梁市|