鄧華

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

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

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

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

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

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


          關(guān)于在頁(yè)面輸出后,看不到源代碼的調(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>

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

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

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

          xloadtree在調(diào)用子節(jié)點(diǎn)樹(shù)的時(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)打開(kāi)后的圖標(biāo). target為目標(biāo),和a標(biāo)簽的target用法一樣.


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


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

          this.setTabIndex(this.tabIndex); 

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


          2006- 4- 22 增加:
            在要打開(kāi)指定目錄樹(shù)的時(shí)候 如果樹(shù)里面包含html代碼, 可以用如下語(yǔ)句
          <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)的問(wèn)題是加載過(guò)程中如果樹(shù)結(jié)點(diǎn)為中文,就加載不上. 后來(lái)找到問(wèn)題的原因是在用servlet輸出xml 的時(shí)候,是用的steam的方式, 后來(lái)改成字符輸出方式才正確. 如下.

                      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ù)。 用來(lái)避開(kāi)瀏覽器的緩存

           

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

          Feedback

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

          # re: 分析xloadtree, 用ajax實(shí)現(xiàn)的動(dòng)態(tài)目錄樹(shù) 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ù)實(shí)現(xiàn).  回復(fù)  更多評(píng)論
            

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          更重要的是 forumTreeControl!load.jspa

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

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永城市| 聂荣县| 乌兰浩特市| 吐鲁番市| 永修县| 宿迁市| 始兴县| 云林县| 陇南市| 大余县| 北碚区| 黔东| 昌图县| 莱州市| 安丘市| 吉水县| 东明县| 安义县| 郓城县| 九江市| 乌兰浩特市| 临江市| 塔河县| 西盟| 富顺县| 眉山市| 建阳市| 锦州市| 天镇县| 乃东县| 丰县| 开阳县| 鄂托克前旗| 甘肃省| 祁阳县| 蓬溪县| 成都市| 丰顺县| 柳州市| 申扎县| 古蔺县|