鄧華

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

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

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

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

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

          xtree2.js :
          輸出html代碼的時(shí)候, 調(diào)用的是toHtml() 方法. 在這個(gè)方法中,其中最主要的是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)建樹的時(shí)候,用如下代碼:

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

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

          xloadtree在調(diào)用子節(jié)點(diǎn)樹的時(shí)候,和服務(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為下級(jí)目錄目錄的地址. action為點(diǎn)擊的鏈接. icon為圖標(biāo),openIcon為節(jié)點(diǎn)打開后的圖標(biāo). target為目標(biāo),和a標(biāo)簽的target用法一樣.


          因?yàn)閤ml 文件不能傳送< > 這種符號(hào), 可以采用&lt; &gt; 傳送.   因?yàn)轫?xiàng)目里需要在樹上顯示HTML代碼,所以在js里面做了修改.  修改的部分比較多. 還沒有測試有沒有意外情況. 這個(gè)以后再說.


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

          this.setTabIndex(this.tabIndex); 

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


          2006- 4- 22 增加:
            在要打開指定目錄樹的時(shí)候 如果樹里面包含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)用的時(shí)候,出現(xiàn)的問題是加載過程中如果樹結(jié)點(diǎn)為中文,就加載不上. 后來找到問題的原因是在用servlet輸出xml 的時(shí)候,是用的steam的方式, 后來改成字符輸出方式才正確. 如下.

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


          2008-09-03

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

           

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

          Feedback

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

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

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

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

          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這個(gè)地方必須指定一個(gè)xml的文件,我試過把
          tree.add(new WebFXLoadTreeItem("2", "2.xml"));
          改為
          tree.add(new WebFXLoadTreeItem("2", "2.jsp?id=2"));
          ,通過2.jsp來生成節(jié)點(diǎn)2的子節(jié)點(diǎn),這些節(jié)點(diǎn)都是從數(shù)據(jù)庫取出來的,但這樣就會(huì)報(bào)錯(cuò),所以我現(xiàn)在只能自己寫一個(gè)2.jsp的程序來生成2.xml文件,這樣的話就導(dǎo)致了這個(gè)樹不是動(dòng)態(tài)的生成.
          我這樣說你可以理解嗎,我想請(qǐng)教你我這個(gè)程序是不是寫的有問題,或者思路本身就是不對(duì)的.謝謝你的回復(fù).  回復(fù)  更多評(píng)論
            

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

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

          提示:無法識(shí)別setTarget該方法.我看了WebFXTree的api也沒有這個(gè)方法,

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

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

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

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

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

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

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

          1、我點(diǎn)開3個(gè)目錄,那么重新load的時(shí)候,這三個(gè)目錄自動(dòng)展開。能不能自動(dòng)展開最后一個(gè),而不是全部3個(gè),或者都不展開。

          2、加載子目錄的xml,里面的對(duì)象名稱該怎么取,因?yàn)樗⑿轮笪蚁氚呀裹c(diǎn)還定位到已選擇的目錄。  回復(fù)  更多評(píng)論
            

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

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

          我是按這種方法引用的,這里有幾個(gè)問題想請(qǐng)教一下:

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

          2.我對(duì)XML文件不了解,沒用過,下面是我的XML請(qǐng)教一下:

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

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

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

          以上兩點(diǎn),請(qǐng)教一下,謝謝。

            回復(fù)  更多評(píng)論
            

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

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

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

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

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

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

          更重要的是 forumTreeControl!load.jspa

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

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

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

          評(píng)論共2頁: 上一頁 1 2 

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 原平市| 张家川| 郯城县| 金沙县| 睢宁县| 长宁县| 漳州市| 防城港市| 车致| 海盐县| 清丰县| 巴马| 怀柔区| 肃宁县| 巴里| 石景山区| 临城县| 永登县| 电白县| 苏州市| 观塘区| 永仁县| 三明市| 高尔夫| 恩平市| 清水河县| 商南县| 宁津县| 海淀区| 南靖县| 左贡县| 万荣县| 邹平县| 沙雅县| 五台县| 章丘市| 衡南县| 绥阳县| 内江市| 勐海县| 安岳县|