2014-04-22 120 views
2

所以我一直在使用jstree一段時間,但仍然無法處理它,這幾乎是一個令人頭疼但很好,它決定我們會用它。我使用的數據來自HTML(不涉及JSON)。我遇到的問題是我不確定如何設置某些節點不是文件夾。每個節點都有一個類,並且基於該類,我可以更改它的圖標,但是如果用戶嘗試發送這些節點內部不應該是文件夾的任何節點,他們將能夠。我需要防止這種方式,但是到目前爲止我測試過的每件事都根本不起作用。jstree防止移動節點到子節點

$("jstree").jstree({ 
      "core": { 
       "animation": 0, 
       "check_callback": true 
      }, 
      rules: { draggable: "all" }, 
      "dnd": { 
       "drop_finish": function (data) { 
        if (data.o.attr("rel") === "ds") { 
         //update chart with new data here? 
         //using data.o.attr("id") 
        } 
       }, 
       "drag_check": function (data) { 
        if (data.r.attr("rel") != "ds") { 
         return false; 
        } 
        return { 
         after: false, 
         before: false, 
         inside: true 
        }; 
       } 
      }, 
      "crrm": { 
       "move": { 
        "check_move": function (data) { 
         // alert(data.r.attr("id")); 
         if (data.r.attr("id") == "999") { 
          return false; 
         } 
         else { 
          return true; 
         } 
        } 
       } 
      }, 

      "plugins": ["dnd", "crrm"] 
     }); 

這就是我用來創建我的樹。另外,我不能禁止拖放,因爲如果用戶想要移動某些項目,但顯然用戶不應該能夠將某些東西拖入任何不是文件夾的東西。

在此先感謝您的幫助,

問候,

阿德里安。

回答

1

我通過使用Types插件jstree plugins完成了此操作。在那裏你可以定義節點的類型,並設置允許哪些類型爲兒童的變量valid_children。這意味着用戶也不能將限制類型的DnD節點放入節點。

在我的例子中,我有一個類型爲「book」的文件夾,它可以將「文件夾」和「文件」節點作爲子節點。 「文件」類型根本不能有任何子項,因爲valid_children被定義爲空。

$('#' + tree_id) 
    .jstree({ 
    'core' : { 
     'check_callback' : true, //needed to enable create, remove, rename... events 
     "themes" : { 
     "stripes" : true 
     } 
    }, 
    "types" : { 
     "book" : { 
     "valid_children" : ["folder", "file"], 
     "icon" : "img/1397762742_book.png" 

     }, 
     "folder" : { 
     "valid_children" : ["folder", "file"], 
     "icon" : "img/1397751666_folder.png" 

     }, 
     "file" : { 
     "valid_children" : [], 
     "icon" : "img/1397752227_page.png" 
     } 
    }, 
    "contextmenu" : { 
     "items" : customMenu 
    }, 
    "plugins" : ["sort", "dnd", "contextmenu", "types"] 

    }); 

type屬性可以添加新節點

tree.create_node("#", { 
     "text" : "sample node", 
     "type" : "file" 
     }); 

或通過使用set_type功能時進行設置。 API