jsTree自定義contextmenu 的二種方式


想看完整的可以去這里看:

轉載來自:jstree使用小結(二)和  JsTree 最詳細教程及完整實例

以下代碼我只列出針對於contextmenu里面的設置;其余代碼不寫了

比如不希望用jstree自身的contextmenu,希望自己定義。則代碼如下

第一種方法;直接編寫items,改寫菜單名稱和重新定義菜單方法

 1     "contextmenu":{
 2         "items":{
 3             "create":null,
 4             "rename":null,
 5             "remove":null,
 6             "ccp":null,
 7             "新建菜單":{
 8               "label":"新建菜單",
 9               "action":function(data){
10                   var inst = jQuery.jstree.reference(data.reference),
11                   obj = inst.get_node(data.reference);
12                   dialog.show({"title":"新建“"+obj.text+"”的子菜單",url:"/accountmanage/createMenu?id="+obj.id,height:280,width:400});
13                 }
14             },
15             "刪除菜單":{
16                 "label":"刪除菜單",
17                     "action":function(data){
18                     var inst = jQuery.jstree.reference(data.reference),
19                         obj = inst.get_node(data.reference);
20                     if(confirm("確定要刪除此菜單?刪除后不可恢復。")){
21                         jQuery.get("/accountmanage/deleteMenu?id="+obj.id,function(dat){
22                             if(dat == 1){
23                                 alert("刪除菜單成功!");
24                                 jQuery("#"+treeid).jstree("refresh");
25                             }else{
26                                 alert("刪除菜單失敗!");
27                             }
28                         });
29                     }
30                 }
31             },
32             "編輯菜單":{
33                 "label":"編輯菜單",
34                     "action":function(data){
35                     var inst = jQuery.jstree.reference(data.reference),
36                         obj = inst.get_node(data.reference);
37                     dialog.show({"title":"編輯“"+obj.text+"”菜單",url:"/accountmanage/editMenu?id="+obj.id,height:280,width:400});
38                 }
39             }
40         }
41     }

第二種:編寫菜單名稱的時候帶入變量,且重新定義方法

(1)在jstree的源碼中已經預定了右鍵菜單如下:

 

 

 

$.jstree.defaults.contextmenu = {
   select_node:true,//設置當前節點是否為選中狀態 true表示選中狀態
    show_at_node:true,//設置右鍵菜單是否和節點對齊 true表示對齊
    items : function (o, cb) { // Could be an object directly
            return {
                "create" : {
                    "separator_before"    : false,//Create這一項在分割線之前 
                    "separator_after"    : true,//Create這一項在分割線之后
                    "_disabled"            : false, //false表示 create 這一項可以使用; true表示不能使用
                    "label"                : "Create",  //Create這一項的名稱 可自定義
                    "action"            : function (data) {  //點擊Create這一項觸發該方法
                        var inst = $.jstree.reference(data.reference),
                            obj = inst.get_node(data.reference);//獲得當前節點,可以拿到當前節點所有屬性              //新加節點
                        inst.create_node(obj, {}, "last", function (new_node) {
                            setTimeout(function () { inst.edit(new_node); },0);//新加節點后觸發 重命名方法,即 創建節點完成后可以立即重命名節點
                        });
                    }
                },
....
var $tree=$('#tree1');
        $tree.jstree({
            "core": {
                "themes": {
                    "responsive": false
                },
                "check_callback": true,
                'data': []
            },
            "contextmenu":{
                select_node : false,//設置當前節點是否為選中狀態 true表示選中狀態
                show_at_node : true,//設置右鍵菜單是否和節點對齊   true表示對齊
                items: function(o, cb){
                    //因為這里我們之后需要定義多個項,所以通過對象的方式返回
                    var actions={};
                    //添加一個"新增"右鍵菜單
                    actions.create={//這里的create其實闊以隨意命名,關鍵是里面的 這里面的 action回調方法
                        "separator_before"    : false,//Create這一項在分割線之前
                        "separator_after"    : true,//Create這一項在分割線之后
                        "_disabled"            : false, //false表示 create 這一項可以使用; true表示不能使用
                        "label"                : "新增",  //Create這一項的名稱 可自定義
                        "action"            : function (data) {  //點擊Create這一項觸發該方法,這理還是蠻有用的
                            var inst = $.jstree.reference(data.reference),
                                 obj = inst.get_node(data.reference);//獲得當前節點,可以拿到當前節點所有屬性
                            //新加節點,以下三行代碼注釋掉就不會添加節點
                            inst.create_node(obj, {}, "last", function (new_node) {
                                setTimeout(function () { inst.edit(new_node); },0);//新加節點后觸發 重命名方法,即 創建節點完成后可以立即重命名節點
                            });
                        }
                    };
                    //添加一個"重命名"右鍵菜單
                    actions.rename={
                        "separator_before"    : false,
                        "separator_after"    : false,
                        "_disabled"            : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
                        "label"                : "重命名",
                        "action"            : function (data) {
                            var inst = $.jstree.reference(data.reference),
                                    obj = inst.get_node(data.reference);
                            inst.edit(obj);
                        }
                    }
                    //添加一個"刪除"右鍵菜單
                    actions.delete= {
                        "separator_before"    : false,
                                "icon"                : false,
                                "separator_after"    : false,
                                "_disabled"            : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
                                "label"                : "刪除",
                                "action"            : function (data) {
                                    var inst = $.jstree.reference(data.reference),
                                            obj = inst.get_node(data.reference);
                                    if(inst.is_selected(obj)) {
                                        inst.delete_node(inst.get_selected());
                                    }
                                    else {
                                        inst.delete_node(obj);
                                    }
                        }
                    };
                    return actions;//返回右鍵菜單項
                }
            },
            "types": {
                "default": {
                    "icon": "fa fa-folder icon-state-warning icon-lg"
                },
                "file": {
                    "icon": "fa fa-file icon-state-warning icon-lg"
                }
            },
            "plugins": ["contextmenu","dnd", "state", "types"]
        });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM