21

昨日、jQueryとjsTreeプラグインを試してみて、サーブレットへのAJAX呼び出しでツリーを正常にロードできるようにしました。ここで、ロード後にツリーですべてのノードを開いてもらいたいので、ajax属性にsuccess関数を追加しました。ただし、open_all()メソッドを正しく機能させることができないようです。私はjQueryの操作に非常に慣れていないので、間違っているのは単純なことだと思います。

Firebugは、メソッド名の入力ミスによるダムエラーを除外するエラーを表示していません。私はドキュメントをチェックしました、そして私は私が読んだものに従ってすべてを正しくやっていると思います。ツリーは正しくロードされていますが、ページのロード後にすべてのノードが開かれるわけではありません。

Firefox3.6.8でjQuery1.4.2とjsTree1.0rc2を使用しています。

ツリーをロードし、ツリー内のすべてのノードを開こうとするために使用しているコードは次のとおりです。

// Create the tree object
$("td#modelXML").jstree({
    core : { "animation" : 0 },
    //xml_data : {"data" : "" + xml, "xsl" : "nest"},
    xml_data : {"ajax" : 
                    {"url" : "servlet/GetModelHierarchy", 
                    "type" : "post", "data" : { modelId : "" + modelId} }, 
                    "xsl" : "nest",
                    "success" : function(){
                                $(this).open_all(-1);
                                }
    },
    themes : {"theme" : "classic", "dots" : true, "icons" : true},
    types : { 
        "types" : {
            "category" : {
                "valid_children" : ["factor"]
            },
            "factor" : {
                "valid_children" : ["level"]
            },
            "level" : {
                "valid_children" : "none",
                "icon" : {
                    "image" : "${request.contextPath}/jsTree/file.png"
                }
            }
        }
    },
    plugins : ["themes", "types", "xml_data"]
});
4

4 に答える 4

40

イベントにフックしてから、を呼び出す必要がありますopen_all

ロード時にすべてのノードを開くには、次を使用します。

    var tree = $("#id-or-selector-for-my-tree-element");
    tree.bind("loaded.jstree", function (event, data) {
        tree.jstree("open_all");
    });

ツリーをで初期化する前に、上記を実行してください.jstree({...})

更新した後、すべてのノードを再度開くには、次を使用する必要があります。

    tree.bind("refresh.jstree", function (event, data) {
        tree.jstree("open_all");
    });
于 2010-09-10T03:58:08.773 に答える
20

はい、これは古い質問ですが、受け入れられた答えがなく、私にとって役に立たない唯一の答えがあるので、これが私が現在使用している私の答えです:

var tree = $("td#modelXML")
    .bind("loaded.jstree", function (e, data) {
        data.inst.open_all(-1); // -1 opens all nodes in the container
    })
    .jstree({ /* your jsTree options as normal */ });

ここで重要なのは、それdata.instがあなたのであり、終了するまで値がないjsTreeため、利用できる唯一の参照です。は呼び出し内で呼び出されるため、結果はまだ存在しません。見る?tree.jstree({loaded.jstree.jstree({

于 2010-11-03T11:03:09.343 に答える
3

私はそれを完全に動作させることができませんでした、tree.jstree('open_all')またはdata.inst.open_all(-1)-最終的には使用する必要がdata.instance.open_all()ありました-instからinstanceへの変更に気づき、open_all(-1)からopen_all()だけになりました-どちらもjQueryで必要なようです1.11およびjstree3.0.0。私の最終的なコードブロックは次のようになります。

$(document).ready(function() {
    var tree = $('#jstree');
    tree.bind('loaded.jstree', function(event, data) {
        data.instance.open_all();   
    });
    tree.jstree({});
});
于 2014-03-04T15:47:08.783 に答える
1

これを試して!

$("td#modelXML").jstree("open_all","#nodeID");
于 2010-12-24T10:14:06.690 に答える