4

jstree の contextmenu を使用して、新しく作成されたノードの名前を取得しようとしています。(obj.text() を使用して) 新しいノードを追加する親ノードの名前を取得できますが、本当に必要なのは、新しく作成されたノードの名前です。

どういうわけか、新しく作成されたノードでユーザーがEnterキーを押すと起動するjstreeコンテキストメニュー内で呼び出すことができる「onChange」イベントが必要ですか?

何か案は?contextmenu コードを同封しました。

}).jstree({
        json_data: {
            data: RBSTreeModel,
            ajax: {
                type: "POST",
                data: function (n) {
                    return {
                        NodeID: n.attr("id").substring(4),
                        Level: n.attr("name").substring(7)
                    };
                },
                url: function (node) {
                    return "/Audit/GetRequirementsTreeStructure";
                },
                success: function (new_data) {
                    return new_data;
                }
            }
        },
        contextmenu: {
            items: function($node) {
                return {
                    createItem : {
                        "label" : "Create New Branch",
                        "action" : function(obj) { this.create(obj); alert(obj.text())},
                        "_class" : "class"
                    },
                    renameItem : {
                        "label" : "Rename Branch",
                        "action" : function(obj) { this.rename(obj);}
                    },
                    deleteItem : {
                        "label" : "Remove Branch",
                        "action" : function(obj) { this.remove(obj); }
                    }
                };
            }
        },
        plugins: ["themes", "json_data", "ui", "crrm", "contextmenu"]
    });
4

2 に答える 2

6

ノードが作成された後に発生する「create.jstree」イベントにバインドできます。そのイベントのコールバックでは、新しく作成されたノードにアクセスでき、必要に応じてノードの作成アクションをロールバック/元に戻すことができます。ドキュメントは不足していますが、デモページに例があります。これは私のコードから来た別の例です:

}).jstree({... You jstree setup code...})
        .bind("create.jstree", function(e, data) {
            // use your dev tools to examine the data object
            // It is packed with lots of useful info
            // data.rslt is your new node
            if (data.rslt.parent == -1) {
                alert("Can not create new root directory");
                // Rollback/delete the newly created node
                $.jstree.rollback(data.rlbk);
                return;
            }
            if (!FileNameIsValid(data.rslt.name)) {
                alert("Invalid file name");
                // Rollback/delete the newly created node
                $.jstree.rollback(data.rlbk);
                return;
            }
            .. Your code etc...
        })
于 2012-09-04T20:42:01.793 に答える
3

Bojin Li の回答に基づいて、jsTree の最新バージョンは「create」ではなく「create_node」イベントを使用しているようです。

}).jstree({... jstree セットアップ コード...})
      .bind(" create_node .jstree", function(e, data) {
        ...
       });

于 2014-05-20T16:21:47.367 に答える