【问题标题】:jstree preselect node and open all parents neededjstree预选节点并打开所有需要的父节点
【发布时间】:2014-02-19 00:06:55
【问题描述】:

我使用 Jstree 1.0RC3 并没有让它工作来选择一个节点并让树打开以便该节点可见。 我的代码是这样的:

.jstree({ 
    // List of active plugins
    "plugins" : [ 
        "themes","json_data","ui","crrm","dnd","search","types","hotkeys","contextmenu" 
                    //"themes","json_data","ui","crrm","cookies","dnd","types","hotkeys"
    ],

    "json_data" : { 
        "ajax" : {
            "url" : $path + "/server.php",
            "data" : function (n) { 

                return { 
                    "operation" : "get_children",
                    "id" : n.attr ? n.attr("id").replace("node_","") : <?php echo($jstree_root); ?>


                };
            }
        }
    }, 

    },
"core" : { 
        // just open those two nodes up
        // as this is an AJAX enabled tree, both will be downloaded from the server
        "initially_open" : [ <?php echo($jstree_root_node); ?> ] 

UI 插件为空。 php echo($jstree_root_node) 打开根目录下的第一个层次结构以获得更好的概览。有时我想传递应该选择的节点的 ID。默认情况下,通过打开树,此节点并不总是可见。我看到的是,如果节点在第一个层次结构中可见,它将被选中。如果更深,则不被选中。

我在论坛中发现在 JSTREE 调用之前使用它,但它不起作用:

        .bind("reopen.jstree", function () {
      $("#demo").jstree("select_node", "#node_1637");
      $("#node_1637").parents(".jstree-closed").each(function () {
            $("#demo").jstree("open_node", this, false, true);
      });
    })

关于这个有什么想法吗?它似乎就在我的鼻子前面,但我没有看到它......

gb5256

【问题讨论】:

    标签: jstree


    【解决方案1】:

    我认为有两种方法可以处理它。

    第一个选项 - 使用“initially_open”,您需要指定从根到选定节点的所有节点。 jsTree 会按照这个顺序,打开每个节点,加载它的内容,打开下一个节点,加载它的内容等等。

    脚本的一些基本思想:

    "core" : { 
            "initially_open" : [ < ?php echo implode(',', $path_to_node) ?> ] 
    }
    

    第二个选项 - 使用“搜索”插件,您需要创建一个 php 脚本,该脚本将由 ajax 请求调用,并应返回搜索节点的路径。 所以你定义搜索插件:

          'search' : {
              'case_insensitive' : true,
              'ajax' : {
                  'url' : 'search_script.php',
                  'data' : function(n) {
                      return { search_id : n };
                  }
              }
          },
    

    然后在加载树后绑定搜索动作:

        $('#tree').bind('loaded.jstree', function(e, data){  
              $('#tree').jstree('search', <?php echo($jstree_searched_node); ?>); 
        });        
    

    search_script.php 应该返回要以与第一个选项相同的方式打开的节点键数组。

    这不是完整的复制和粘贴解决方案,但我希望这将带您成功完成它。

    【讨论】:

    • 搜索是一个很好的方向,几乎可以在没有太多编码的情况下完成所有用例(后端只有一点变化)我仍然缺少的是在打开完整路径时调用的异步事件。
    【解决方案2】:

    您可以使用 open_all 打开所有可用节点。

    $("#TreeID").jstree('open_all');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      相关资源
      最近更新 更多