26

ここでjsTreeに行き詰まっています。これまでのところ動作しており、[+] アイコンを使用してノードを参照および展開し、ノードをクリックするとページを開くことができますが、誰かがノードをクリックするたびにすべての直接ノードを展開したいと考えています。

少なくとも2時間周りを見回しましたが、何も見つかりませんでした。公式ウェブサイトには十分な例がなく、十分に文書化されていないため、あまり役に立ちません。これを見てみましたが、私にとってもうまくいきませんでした: http://luban.danse.us/jazzclub/javascripts/jquery/jsTree/reference/_examples/2_operations.html

firebugでエラーメッセージすら表示されませんでした

これが私のコードが今どのように見えるかです、ツリー初期化:

$(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); 
    } 
})

誰かが私がここで見逃しているものを見ていますか...?

4

3 に答える 3

38

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);
});
于 2011-10-14T19:04:53.287 に答える
5

新しいバージョンの jsTree (jsTree.js によると 3.0.0) では、@justind が提供するコードを少し変更して動作させる必要がありました。

$("#jstree").bind("select_node.jstree", function (e, data) {
    return data.instance.toggle_node(data.node);
});
于 2014-02-01T14:32:47.507 に答える
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"));

やりますか...

于 2010-12-28T09:10:56.023 に答える