2017-10-12 13 views
0

私はjstreeにajax遅延ロードをロードしていますが、jstreeのコンテキストメニュープラグインも実装されています。 jstreeが完全にロードし、コンテキストメニューを使用しようとしていないようなので、コンテキストメニューがjstreeコンテキストメニューが機能しない

Uncaught TypeError: Cannot read property 'get_node' of null

としてエラーを取得クリックされたときのようです。

jstreeを読み込んだ後にコンテキストメニューを使用する方法を教えてください。

編集:ここで私はあなたが木のデータを受信した後、あなたは木をロードすることができ、事前

+2

からヒントを得ることができますロードCCODEの男にそれが働いた –

答えて

1

loadTree: function() { 
    $j('#JSTree').jstree({ 
     'core' : { 
      check_callback : true, 
      data : function(obj, cb) { 
       var path = this.get_path(obj,'/') || '/'; 
       ecpmServices.getTreeNode(path).then(function(response){ 
         var treeData = response.data; 
         if(typeof treeData === 'object') { 
           treeData = parseTree(treeData, obj); 
           console.log(treeData); 
           cb.call(this,treeData); 
         } 
       }); 
      } 
     }, 
     "contextmenu" : { 
      items : function(node) { 
       var tmp = $j.jstree.defaults.contextmenu.items(); 
       delete tmp.create.action; 
       delete tmp.rename; 
       delete tmp.ccp; 
       tmp.create.label = "New"; 
       tmp.create.submenu = { 
        create_folder: { 
         label: "Folder", 
         separator_after: true, 
         action: function (data) { 
          var inst = $j.jstree.reference(data.reference); 
          console.log(data.reference); 
           var obj = inst.get_node(data.reference); 
           inst.create_node(obj, { type : "folder", text : "New folder" }, "last", function (new_node) { 
           setTimeout(function() { inst.edit(new_node); },0); 
          }); 
         } 
        }, 
        create_file : { 
         label: "File", 
         action: function (data) { 
          var inst = $j.jstree.reference(data.reference), 
          obj = inst.get_node(data.reference); 
          inst.create_node(obj, { type : "file", text : "New file" }, "last", function (new_node) { 
           setTimeout(function() { inst.edit(new_node); },0); 
          }); 
         } 
        } 
       }; 
       if(this.get_type(node) === "file") { 
        delete tmp.create; 
       } 
       return tmp; 
      } 
     }, 
     "plugins" : ["contextmenu"] 
    }); 
}; 

感謝をjstreeロードするために使用するスニペットがあります。

<script type="text/javascript"> 
    $(function() { 
     //Call your ecpmServices.getTreeNode(path).then(function(response){ 
     //var treeData = response.data; 
     // if success then call loadTree(treeData) with treeData 
     // if failure handle it      
    }); 
</script> 

以下のように次に、あなたのコードが

loadTree: function(treeData) { 
$('#JSTree').jstree({ 
    'core' : { 
     check_callback : true, 
     data : treeData    
    }, 
    "contextmenu" : { 
     items : function(node) { 
      var tmp = $j.jstree.defaults.contextmenu.items(); 
      delete tmp.create.action; 
      delete tmp.rename; 
      delete tmp.ccp; 
      tmp.create.label = "New"; 
      tmp.create.submenu = { 
       create_folder: { 
        label: "Folder", 
        separator_after: true, 
        action: function (data) { 
         var inst = $j.jstree.reference(data.reference); 
         console.log(data.reference); 
          var obj = inst.get_node(data.reference); 
          inst.create_node(obj, { type : "folder", text : "New folder" }, "last", function (new_node) { 
          setTimeout(function() { inst.edit(new_node); },0); 
         }); 
        } 
       }, 
       create_file : { 
        label: "File", 
        action: function (data) { 
         var inst = $j.jstree.reference(data.reference), 
         obj = inst.get_node(data.reference); 
         inst.create_node(obj, { type : "file", text : "New file" }, "last", function (new_node) { 
          setTimeout(function() { inst.edit(new_node); },0); 
         }); 
        } 
       } 
      }; 
      if(this.get_type(node) === "file") { 
       delete tmp.create; 
      } 
      return tmp; 
     } 
    }, 
    "plugins" : ["contextmenu"] 
}); 
}; 

のようになります。あなたはhttps://everyething.com/Example-of-simple-jsTree-with-dynamic-JSON-data

+0

感謝を示した:) –

関連する問題