ztree吧 关注:1,826贴子:12,470
  • 13回复贴,共1

如何搜索节点,返回重新加载一棵树

只看楼主收藏回复

一个比较大的树,采用异步加载的方式展现一颗树,我想搜索具体一个节点
我的节点名称是唯一的,可以在后台找到
然后,返回如何展开,具体树的节点?把光标落在刚需要搜索的节点上
或者 如何重新加载一棵新的树???
谢谢


IP属地:广东1楼2012-05-02 09:11回复
    不清楚你的具体情况, 对于重新加载新的树,只需要利用 init 方法重新初始化即可。
    补充:
    1、如果你的需求是反复不断加载后,最终需要几万个节点同时显示在页面上,那么建议不要采用 web 这种简单的页面方式了。因为最终会很慢甚至浏览器崩溃(尤其是 IE)
    2、异步加载可以考虑将相关父节点的子节点全部一次性加载,这样一次加载就把需要的数据都加载完毕了。


    2楼2012-05-02 10:34
    回复
      2026-03-26 00:41:10
      广告
      不感兴趣
      开通SVIP免广告
      在比较多节点的情况下,我想搜索具体一个节点
      请问采用什么方法比较好?
      搜索后光标需要移到该节点上,并节点的父节点都展开


      IP属地:广东3楼2012-05-02 13:19
      回复
        1、要看你的节点多到什么地步,
        如果是1w 以内,并且节点分布较均匀,避免某父节点下一级子节点就有上千的情况——可以一次性加载全部节点,利用getNodeByParam 等方法得到节点后,直接利用 selectNode 方法选中即可实现功能
        如果节点数据量太多,并且分布不均匀,那么只能进行异步加载,可以利用需要选中的节点的父节点逐步异步加载展开的方法实现(这个稍微复杂一些,要一个个异步加载逐步进行)


        4楼2012-05-02 18:10
        回复
          2、如果页面长时间打开,不关闭;并且逐渐导致全部节点都会显示的情况。。。对于上万节点的显示来说,web 方式会比较慢了。。。尤其是 IE


          5楼2012-05-02 18:11
          回复
            请问一下如何 利用需要选中的节点的父节点逐步异步加载展开的方法实现?
            如何遍历,谢谢


            IP属地:广东6楼2012-05-03 00:02
            回复
              我已经实现了异步加载功能
              就不清楚,查询搜索后的,如何再次异步加载,我只要在数据库查到节点,就可以查到该节点父节点的所有ID


              IP属地:广东7楼2012-05-03 00:08
              回复
                reAsyncChildNodes 方法可以强行让父节点异步加载其子节点。


                8楼2012-05-03 09:32
                回复
                  2026-03-26 00:35:10
                  广告
                  不感兴趣
                  开通SVIP免广告
                  异步加载树,只能搜索到已经加载好了的节点。不能搜索没有加载的节点。如果你要实现搜索功能,只能递归的异步加载整棵树,然后,设置多少秒钟后可以让客户点击搜索,这样,你就能实现你所说的功能


                  IP属地:湖南9楼2012-05-04 12:29
                  回复
                    你的问题要根据你实际情况进行分析,并且根据需求来确定如何来实现,这里面有很多不确定性。
                    1、节点多到什么程度?如果一次性全部加在能有多慢?
                    2、用户搜索后做什么操作?是否搜索后就要将节点相关的父节点,以及相应父节点的子节点都加载? 这样会导致 因素1 节点很多的情况长时间运行页面后,依然会很慢。
                    3、根据页面展示的合理性适当修改需求,来实现你的需求
                    因为以上几个因素,所以你这种设置多少秒后可以让客户点击搜索的问题很难确定,不过这两天正在为 v3.2 制作新的Demo,其中包括 异步加载模式下子节点全部自动加载的演示。
                    


                    10楼2012-05-04 21:49
                    回复
                      你好 你是怎么实现查询异步加载的,我现在也在查询这一块遇到了瓶颈:
                      1.现在的树已经实现异步加载的功能;
                      2.实现查询节点功能时,我的想法是,我在后台获得当前查询节点的父节点的信息
                      然后通过reAsyncChildNodes强制打开
                      通过getNodeByParam获得节点信息 再通过selectNode转移光标;
                      我的想法是通过不断递归这三个方法得到并打开查询节点
                      如:1,2,3,4,5 他们是父子关键节点,我要查询5这个子节点,我在后台获得他所有的父节点4,3,2,1的id信息,
                      在前台我先打开1节点,把光标移掉2下 。。。。这样一级一级的递归得到;
                      但是现在出现的问题 这个方法行不通!
                      想向你请教你是怎么解决查询问题的!
                      


                      IP属地:北京11楼2012-05-16 15:43
                      回复
                        这个其实也没有那么复杂,自己把逻辑想清楚就可以了。
                        假设 1 - 2 - 3 - 4 这是一系列父子关系的节点,同时 1 、 2 、3 肯定还都存在其他的子节点。
                        方案一:
                        当你知道需要显示 4 的时候,在后台可以知道其 父节点的id分别为 1,2,3
                        然后分别去 zTree 查找,1存在,那么就看2是否存在,如果不存在就利用 reAsyncChildNodes 加载 1的子节点,利用 onAsyncSuccess 捕获加载完毕的状态,然后就直接去利用 reAsyncChildNodes 去加载 2 的子节点,同样的方法,加载完毕后,再去 加载3的子节点,然后 4就得到了。
                        这个方案的关键点是你需要在全局有一个加载链表,用于记录当前已经加载到哪里了。。是否需要继续加载等。 但这个方法比较麻烦。
                        方案二:
                        既然后台能够 分别渠道 1 的子节点、2的子节点,3的子节点,
                        那么可以将 1、2、3的参数一次性传给后台,让后台一次性查找 1、2、3的子节点,一次性就可以将所有需要的数据全部获取,利用 简单数据模式,可以很容易的加载进入 zTree
                        然后实现功能(强力推荐)
                        


                        12楼2012-05-16 17:48
                        收起回复