sin's profile有话好好说BlogLists Tools Help
    6/29/2006

    分析xloadtree, 用ajax实现的动态目录树

    此文来自:nickey
     
    这两天,为了实现ajax的树形目录,找了很多代码. 最后确定用xloadtree.

    在xloadtree的主页上, 有项目xtree 和xloadtree  一个是固定显示的树,一个是动态加载的树.

    在他的隐藏目录里,有一个xtree2  地址为http://webfx.eae.net/dhtml/xtree2b/  这个是正在测试的版本, 融合了xtree和xloadtree.  更新了代码, 但还是beta版.

    xloadtree 可以在各种浏览器下通用. 兼容性效果非常好.

    主要的三个文件:  xtree2.js, xloadtree2.js, xtree2.css 
    xloadtree2.js 主要是对ajax方式的封装, 实现异步调用. 显示树的时候,调用xtree2.js里面的代码. xtree2.css 控制树的显示式样.  在查看他的文档的时候,主要看xtree2的文档,这里面才有对树怎样进行操作. xloadtree只是个调用包装.

    xtree2.js :
    输出html代码的时候, 调用的是toHtml() 方法. 在这个方法中,其中最主要的是getRowHtml() 来得到每一行的输出.  方法中用 getExpandIconHtml() 来控制展开后图标的代码输出, getIconHtml()控制未展开的图标输出.  getLabelHtml() 控制文本的输出, 如果不想要图标,就把图标的输出代码屏蔽掉就OK.


    关于在页面输出后,看不到源代码的调试方法:

    <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>

    在页面中放置如上代码.  注意,先要获得树的句柄.  比较创建树的时候,用如下代码:

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

    在展开的树点,选择后, 点击change 按钮,可以得到这个节点对应的html代码.  然后对应html可以找到相应的CSS. 这个就不多写了.

    xloadtree在调用子节点树的时候,和服务器之间传输的是xml.
    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为图标,openIcon为节点打开后的图标. target为目标,和a标签的target用法一样.


    因为xml 文件不能传送< > 这种符号, 可以采用&lt; &gt; 传送.   因为项目里需要在树上显示HTML代码,所以在js里面做了修改.  修改的部分比较多. 还没有测试有没有意外情况. 这个以后再说.


    还有, 在使用过程中,有一个BUG. 是设置tabindex的. 会出错.

    this.setTabIndex(this.tabIndex); 

    将xtree2.js文件中的这一行屏蔽掉就行了. 当然,先要确定你不需要使用tab键定位. :)


    2006- 4- 22 增加:
      在要打开指定目录树的时候 如果树里面包含html代码, 可以用如下语句
    <script>try{top.tree.tree.openPath(webFXTreeHandler.htmlToText("/北京新东方学校/<font color=red><b>留学考试</b></font>/fff"),true);}catch(err){}</script>


    2006-5-19
    前天在同事应用的时候,出现的问题是加载过程中如果树结点为中文,就加载不上. 后来找到问题的原因是在用servlet输出xml 的时候,是用的steam的方式, 后来改成字符输出方式才正确. 如下.

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


    Comments (14)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    No namewrote:

    Hi,Do you need advertising displays, digital signages, ad players, advertisement player and LCD advertisings? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers. amberdigital Contact Us

    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[hdf

    Sept. 10
    Sept. 2
    No namewrote:
    读《.九.评.共.产.党》 做.三.退.保.平.安 全.球.退.党.热.线.电.话:001-416-361-9895 邮箱:tuidang@epochtimes.com (请使用海外邮箱和破网软件配合发送.三.退.声明)更多请访问 美好未来 获取破网软件
    July 1
    wrote:
    终于发现一个在日本的老乡  ^-^
     
     
    June 14
    我想问问能把flv格式的视频 做成背景音乐吗? 我只是想要那个音乐,, 谢谢 打扰了。
    Apr. 8
    籽游wrote:
    这么久没有更新,换地方了吗?/
    Mar. 13
    斐 许wrote:
    好文。
    Nov. 4
    阿土伯wrote:
    我要加背景音乐,怎么也弄不好,你会吗?
    Oct. 31
    彪 王wrote:
    哪个列表中的 试试看新的功能 是怎么做的??能不能教教我...谢谢~
    Aug. 24
    Picture of Anonymous
    anh wrote:
    不错,收藏了
    您的一位朋友已经在Anh博客推荐网( www.anh.cn )上推荐了您的博客,目前还没有排名。您可以将下面这个地址作为一个名为《投我一票》的超链接在您的博客连接上,或在msn,qq上发送,让支持您的人直接点击投票^-^投票地址:http://www.anh.cn/blog.jsp?id=157572
    Aug. 2
    Picture of Anonymous
    QQ/MSN互动联盟 wrote:
    好兄弟你回来了啊 ,很开心呢,
    谢谢你上次帮我放的连接,效果挺好的,我的站你不会忘了吧www.msnslm.com有没有想过一起搞啊,我白天上不了QQ/MSN,所以你可以发邮件给我的msnslm@oman.com.cn,
    真的很想和你聊聊,你知道吗我毕业了,现在在上海这边工作!
    July 19
    喂  大哥
    这个有点难
    能具体问你些技术问题吗?
    July 13
    -光之燚-wrote:
    这是干嘛?为什么这么想不开?!
    July 11
    YYwrote:
    试验一下。
    June 29

    Trackbacks

    The trackback URL for this entry is:
    http://slim.spaces.live.com/blog/cns!E51A85071AEBECD3!2814.trak
    Weblogs that reference this entry
    • None