鄧華

          BlogJava 聯(lián)系 聚合 管理
            48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
          這兩天,為了實現(xiàn)ajax的樹形目錄,找了很多代碼. 最后確定用xloadtree.

          在xloadtree的主頁上, 有項目xtree 和xloadtree  一個是固定顯示的樹,一個是動態(tài)加載的樹.

          在他的隱藏目錄里,有一個xtree2  地址為http://webfx.eae.net/dhtml/xtree2b/  這個是正在測試的版本, 融合了xtree和xloadtree.  更新了代碼, 但還是beta版.

          xloadtree 可以在各種瀏覽器下通用. 兼容性效果非常好.

          主要的三個文件:  xtree2.js, xloadtree2.js, xtree2.css 
          xloadtree2.js 主要是對ajax方式的封裝, 實現(xiàn)異步調(diào)用. 顯示樹的時候,調(diào)用xtree2.js里面的代碼. xtree2.css 控制樹的顯示式樣.  在查看他的文檔的時候,主要看xtree2的文檔,這里面才有對樹怎樣進(jìn)行操作. xloadtree只是個調(diào)用包裝.

          xtree2.js :
          輸出html代碼的時候, 調(diào)用的是toHtml() 方法. 在這個方法中,其中最主要的是getRowHtml() 來得到每一行的輸出.  方法中用 getExpandIconHtml() 來控制展開后圖標(biāo)的代碼輸出, getIconHtml()控制未展開的圖標(biāo)輸出.  getLabelHtml() 控制文本的輸出, 如果不想要圖標(biāo),就把圖標(biāo)的輸出代碼屏蔽掉就OK.


          關(guān)于在頁面輸出后,看不到源代碼的調(diào)試方法:

          <br/>
          <INPUT type="button" name="ad" onclick="charge();" value="change">
          <br/>
          <TEXTAREA rows="10" cols="30" id="ttt" name="ttt"></TEXTAREA>
          <br/>
          <INPUT type="button" name="findnode" onclick="findnode();" value="findnode">
          <br/>
          <INPUT type="button" name="openpath" onclick="openpath();" value="openpath">
          <script>
              
          function charge(){
                  document.getElementById('ttt').value
          =tree.getSelected().toHtml();
              }
              
              
          function findnode(){
                  tree.findChildByText(document.getElementById('ttt').value,
          0);
              }
              
              
          function openpath(){
                  tree.openPath(webFXTreeHandler.htmlToText(document.getElementById('ttt').value),true);
                  tree.getSelected().expand();
              }
          </script>

          在頁面中放置如上代碼.  注意,先要獲得樹的句柄.  比較創(chuàng)建樹的時候,用如下代碼:

          var tree = new WebFXTree("<%=rootname%>");

          在展開的樹點,選擇后, 點擊change 按鈕,可以得到這個節(jié)點對應(yīng)的html代碼.  然后對應(yīng)html可以找到相應(yīng)的CSS. 這個就不多寫了.

          xloadtree在調(diào)用子節(jié)點樹的時候,和服務(wù)器之間傳輸?shù)氖莤ml.
          DTD的定義如下
          <!ELEMENT tree (tree*)>
          <!ATTLIST tree
                      text        CDATA    #REQUIRED
                      src            CDATA    #IMPLIED
                      action        CDATA    #IMPLIED
                      icon        CDATA    #IMPLIED
                      openIcon    CDATA    #IMPLIED
                      target        CDATA    #IMPLIED
          >

          其中 text為顯示文本,  src為下級目錄目錄的地址. action為點擊的鏈接. icon為圖標(biāo),openIcon為節(jié)點打開后的圖標(biāo). target為目標(biāo),和a標(biāo)簽的target用法一樣.


          因為xml 文件不能傳送< > 這種符號, 可以采用&lt; &gt; 傳送.   因為項目里需要在樹上顯示HTML代碼,所以在js里面做了修改.  修改的部分比較多. 還沒有測試有沒有意外情況. 這個以后再說.


          還有, 在使用過程中,有一個BUG. 是設(shè)置tabindex的. 會出錯.

          this.setTabIndex(this.tabIndex); 

          將xtree2.js文件中的這一行屏蔽掉就行了. 當(dāng)然,先要確定你不需要使用tab鍵定位. :)


          2006- 4- 22 增加:
            在要打開指定目錄樹的時候 如果樹里面包含html代碼, 可以用如下語句
          <script>try{top.tree.tree.openPath(webFXTreeHandler.htmlToText("/北京新東方學(xué)校/<font color=red><b>留學(xué)考試</b></font>/fff"),true);}catch(err){}</script>


          2006-5-19
          前天在同事應(yīng)用的時候,出現(xiàn)的問題是加載過程中如果樹結(jié)點為中文,就加載不上. 后來找到問題的原因是在用servlet輸出xml 的時候,是用的steam的方式, 后來改成字符輸出方式才正確. 如下.

                      PrintWriter out=response.getWriter();
                      out.write(outputXML.toString());
                      out.flush();
                      out.close();


          2008-09-03

          關(guān)于隨機(jī)參數(shù),指的是URL請求中帶有一個隨機(jī)參數(shù)。 這個參數(shù),可以是當(dāng)前時間,或者隨機(jī)數(shù)。 用來避開瀏覽器的緩存

           

          posted on 2005-11-13 18:55 鄧華的碎碎念 閱讀(27969) 評論(113)  編輯  收藏
          評論共2頁: 上一頁 1 2 

          Feedback

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-15 16:28 zzb
          你好,我從google里搜到你這篇文章,我也在網(wǎng)站上下了一個xloadtree的包.
          我做了一個把數(shù)據(jù)庫中取得的結(jié)果生成xml文件,在使用xloadtree,可以用.
          我想請教你怎樣可以取得節(jié)點的信息,因為當(dāng)我取到了節(jié)點的信息,我可以通過該信息到數(shù)據(jù)庫查找該節(jié)點包含的子節(jié)點并顯示.
          我說的可能不是太清楚,你能理解我的意思嗎?可以告訴我一個解決的辦法嗎?  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-15 23:25 nickey's home
          嗯? 你的意思是動態(tài)加載一個節(jié)點么? xloadtree就是干這個的. 你可以參考bbs.tol24.com 網(wǎng)站的左側(cè)樹實現(xiàn).  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-16 10:24 zzb
          是的,我是想動態(tài)加載一個節(jié)點,
          我的想法如下
          -root
          |
          |---1
          |
          |---2
          | |
          | |-----2.1
          | |-----2.2
          | |-----2.3
          |
          |---3
          | |
          | |-----3.1
          | |-----3.2
          | |-----3.3

          在這個里面,當(dāng)我點擊節(jié)點2的時候,應(yīng)該可以出現(xiàn)子節(jié)點2.1,2.2,2.3;點擊節(jié)點3出現(xiàn)3的子節(jié)點,這樣我需要判斷鼠標(biāo)點擊的是節(jié)點2還是節(jié)點3在去生成對應(yīng)的子節(jié)點.

          var rti;
          var tree = new WebFXTree("Root");
          tree.add(new WebFXTreeItem("1"));
          tree.add(new WebFXLoadTreeItem("2", "2.xml"));
          tree.add(new WebFXLoadTreeItem("3", "3.xml"));
          在這段代碼中,testtree.xml這個地方必須指定一個xml的文件,我試過把
          tree.add(new WebFXLoadTreeItem("2", "2.xml"));
          改為
          tree.add(new WebFXLoadTreeItem("2", "2.jsp?id=2"));
          ,通過2.jsp來生成節(jié)點2的子節(jié)點,這些節(jié)點都是從數(shù)據(jù)庫取出來的,但這樣就會報錯,所以我現(xiàn)在只能自己寫一個2.jsp的程序來生成2.xml文件,這樣的話就導(dǎo)致了這個樹不是動態(tài)的生成.
          我這樣說你可以理解嗎,我想請教你我這個程序是不是寫的有問題,或者思路本身就是不對的.謝謝你的回復(fù).  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-16 10:33 zzb
          我看了你說的那個網(wǎng)站,它里面用到了xtree2.css,xtree2.js,xloadtree2.js,我下載的xloadtree里沒有這些文件,我把它們下載下來放到本地,測試那個網(wǎng)站的程序,

          var tree = new WebFXTree("酷學(xué)社區(qū)","forumIndex.jspa");
          tree.setTarget("content");

          提示:無法識別setTarget該方法.我看了WebFXTree的api也沒有這個方法,

          var category119=new WebFXLoadTreeItem("直播課堂", "forumTreeControl!load.jspa?treeNode=119","category.jspa?categoryID=119");
          category119.setTarget("content");
          tree.add(category119);

          上面這段代碼,我的理解是,
          節(jié)點名稱:直播課堂
          生成節(jié)點的文件:forumTreeControl!load.jspa?treeNode=119
          action:category.jspa?categoryID=119
          setTarget是將action的路徑在網(wǎng)頁的哪個位置打開
          這樣理解對嗎?
          如果這樣理解正確的話,
          tree.add(new WebFXLoadTreeItem("esport", "node.jsp?nodeid=2"));
          這樣寫就是沒有問題的.是這樣的嗎?  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-16 11:15 zzb
          好了,我已經(jīng)解決了這個問題,其實我只需要用jsp來生成一個xml文件即可,這樣tree.add(new WebFXLoadTreeItem("esport", "node.jsp?nodeid=2"));就可以用了.  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-16 12:03 nickey's home
          呵呵.整體思想還是很簡單的.  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-21 16:36 hzqghost
          請問,我想點擊一個節(jié)點時關(guān)閉其他所有打開的節(jié)點,要怎么修改  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-22 11:51 jeafcn
          已經(jīng)在項目中使用了!  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-27 19:03 wds
          遇到的兩個問題:

          1、我點開3個目錄,那么重新load的時候,這三個目錄自動展開。能不能自動展開最后一個,而不是全部3個,或者都不展開。

          2、加載子目錄的xml,里面的對象名稱該怎么取,因為刷新之后我想把焦點還定位到已選擇的目錄。  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-27 21:03 cookie
          他的cookie在哪里放著呀?  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-29 14:38 lip199162
          tree.add(new WebFXLoadTreeItem("esport", "node.php?nodeid=2"));

          我是按這種方法引用的,這里有幾個問題想請教一下:

          1.我的node.php可以生成我想要的XML而且格式?jīng)]有問題,但這里 esport 結(jié)點不會展開,只出現(xiàn)一個沒有任何內(nèi)容的對話框,很郁悶。

          2.我對XML文件不了解,沒用過,下面是我的XML請教一下:

          <?xml version="1.0"?>
          <tree>
          <tree text="1sub" action="plist.php" target="main"/>
          </tree>

          這個XML沒有問題,但如果我改成
          <tree text="中文" action="plist.php" target="main"/>
          這時就出問題了,問題就出在中文字符上,難道它不支持中文?

          如果我改成
          <tree text="1sub" action="plist.php?mid=3&sid=6" target="main"/>
          這時也出現(xiàn)了問題,錯誤信息顯示 應(yīng)有分號 實在不明白。

          以上兩點,請教一下,謝謝。

            回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-29 16:38 nickey's home
          TO lip199162

          1) WebFXLoadTreeItem 這個我是用的三個參數(shù). 沒有出現(xiàn)問題.
          這樣 : new WebFXLoadTreeItem("<%=category.getName()%>", "forumTreeControl!load.jspa?treeNode=<%=category.getID()%>","category.jspa?categoryID=<%=category.getID()%>");

          2) 可能和你網(wǎng)頁的編碼有關(guān)...  回復(fù)  更多評論
            

          # re: 分析xloadtree, 用ajax實現(xiàn)的動態(tài)目錄樹 2006-03-29 18:07 lip199162
          TO nickey's home

          非常感謝你的幫助,關(guān)于我的第二個問題已經(jīng)在你的幫助下解決了,謝謝你.

          還是第一個問題,你提供的方法,可不可以詳細(xì)些呀?

          更重要的是 forumTreeControl!load.jspa

          category.jspa 這兩個文件是做什么用的,內(nèi)容如何呀?

          其實我的問題是,可以用 node.php?nodeid=2 生成相關(guān) XML 文件, 但生成的XML如何才會自動被 WebFXLoadTreeItem 讀入,調(diào)用呀?

          謝謝你了  回復(fù)  更多評論
            

          評論共2頁: 上一頁 1 2 

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 德庆县| 浪卡子县| 塔河县| 淳安县| 武冈市| 临清市| 贵德县| 枣阳市| 安塞县| 麻阳| 禄丰县| 大石桥市| 阜宁县| 喀喇沁旗| 胶州市| 新巴尔虎左旗| 定边县| 广东省| 定远县| 平泉县| 白沙| 长沙县| 长治市| 斗六市| 兴海县| 绩溪县| 博乐市| 延安市| 桦甸市| 屏山县| 石柱| 公安县| 镇巴县| 寿阳县| 仪征市| 渝中区| 伊宁县| 商都县| 容城县| 迁安市| 巩留县|