2016-04-15 6 views
0

私はjstreeのルートノードの削除を防止しようとしています。before.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/)で切断されたことから、このアプローチは動作しません。以前のバージョンでは、あなたがこのようにそれを行う可能性があるとbefore.jstreeイベントがあったが、もう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:提案していただきありがとうございます。私の答えを編集して説明を追加しました。 –

関連する問題