2016-04-15 104 views
0

我試圖防止刪除jstree中的根節點。在早期版本存在的before.jstree事件,與你可以做這樣的:將函數附加到.jstree

.on("before.jstree", function (e, data) { 
    if(data.func === "delete_node") { 
     if (data.node.type == "root_node" || true) 
     { 
      e.stopImmediatePropagation(); 
      return false; 
     } 
    } 
}) 

但由於before.jstree方法已在jstree 3(https://www.jstree.com/api/)被切斷,這種方法行不通了。有沒有一個替代解決方案沒有操縱contextmenu事件?

+0

如何刪除節點?它是一個上下文菜單嗎?如果選擇了根節點,您可以隱藏該選項嗎? –

回答

1

您可以使用jstree.core.check_callback屬性來實現此目的。該屬性在每個jstree事件觸發器之前計算,並且它期望一個布爾值 - true繼續調用事件處理程序,並且false將其阻塞。
您可以附加此屬性的回調函數,並根據所觸發的事件作出決定。在你的情況下,如果觸發的事件是delete_node並且事件目標節點是根目錄,則可以返回false來阻止該事件。

$('#tree').jstree({ 
    'core' : { 
     'check_callback' : function (operation, node, node_parent, node_position, more) { 
      if ((operation == "delete_node" && node.type && node.type == "root") { 
       return false; 
      } 
      return true; 
     } 
    } 
}); 
+0

@ kayess:感謝您的建議。編輯我的答案添加一個解釋。 –