2010-12-20 105 views
23

我在这里与jsTree卡住了。到目前为止,它可以工作,我可以通过[+]图标浏览和展开节点,单击节点时打开页面,但是我仍然希望当有人单击某个节点时,它可以展开所有直接节点。点击节点时打开分支?

我看了看至少2小时左右,但没有找到任何东西。官方网站并不是非常有用,因为它们没有足够的例子,而且没有很好的记录。有一看这一个,但对我也没有工作: http://luban.danse.us/jazzclub/javascripts/jquery/jsTree/reference/_examples/2_operations.html

我甚至没有在萤火得到一个错误信息

所以这里是我的代码看起来现在, 树的init :

$(function() { 
    $("#jstree").jstree({ 
    .... 

功能通过点击节点触发

.delegate("a","click", function (e) { 
    //click on node 
    var page_id = $(this).parent().attr("page_id"); 
    var idn = $(this).parent().attr("id").split("_")[1]; 
    /* 
      dosnt seem to work either... 
    $(this).jstree("openNode", $("#node_"+idn)); 
    $(this).jstree("openNode", "#node_"+idn); 
    */ 
    page = "index.php?page_id="+page_id; 
    //location.href = page; 
}) 

.bind没有工作之一:

$(this).bind("open_node.jstree", function (event, data) { 
    if((data.inst._get_parent(data.rslt.obj)).length) { 
     data.inst._get_parent(data.rslt.obj).open_node(this, false); 
    } 
}) 

有没有人看到我在这里失踪...?

回答

1

我使用这个(casoUso是页面链接,fInvocaCasoUso是一个函数来进行调用)。

$("#demo1").bind("select_node.jstree", function (e, data) 
        { 
         if (data.rslt.obj.attr("casoUso")!=undefined) 
         { 
          fInvocaCasoUso(data.rslt.obj.attr("casoUso")); 
         } 
         else 
         { 
          $("#demo1").jstree("toggle_node",data.rslt.obj); 
         } 
        }); 

如果节点有链接,则打开,否则打开子树。无论如何,你应该能够结合“if”的双方来打开分支并执行你的链接。 也许执行:

 $("#demo1").jstree("toggle_node",data.rslt.obj); 
     fInvocaCasoUso(data.rslt.obj.attr("casoUso")); 

会做...

37

您需要绑定到select_node.jstree并呼吁树实例toggle_node时,它的触发:

对于jsTree版本< 3.0:

$("#your_tree").bind("select_node.jstree", function(event, data) { 
    // data.inst is the tree object, and data.rslt.obj is the node 
    return data.inst.toggle_node(data.rslt.obj); 
}); 

对于jsTree版本> = 3.0

$("#your_tree").bind("select_node.jstree", function (e, data) { 
    return data.instance.toggle_node(data.node); 
}); 
+0

更新。谢谢 – justind 2014-03-26 16:49:51

+0

已解决,谢谢!但参数在不同> = 3 参见:http://www.jstree.com/api/#/?q=select_node.jstree&f=select_node.jstree 这'函数(节点,选择事件)'现在。 – 2014-10-07 16:17:25

+0

尼克,你可以扩展你使用的功能的更新版本,以便我可以更新答案吗?在你改变新的参数时,新的toggle_node调用是什么? 'data.instance.toggle_node(node);'? – justind 2014-10-09 17:58:12

3

有(根据jsTree.js 3.0.0)jsTree的较新版本,我不得不改变由@justind提供的比特工作的代码:

$("#jstree").bind("select_node.jstree", function (e, data) { 
    return data.instance.toggle_node(data.node); 
});