jsTreeの研究
2011-01-18
コンテキストメニューハック
2866 was_sep = false; 2867 str += "<li class='" + (val._class || "") + (val._disabled ? " jstree-contextmenu-disabled " : "") + "'><ins "; 2868 if(val.icon && val.icon.indexOf("/") === -1) { str += " class='" + val.icon + "' "; }
ってことなので、_disabledが設定されているとjstree-contextmenu-disabledがセットされて、そのメニューが使用できなくなる。
で、これは
2846 $(document).triggerHandler("context_show.vakata");
によりdocumentにcontext_show.vakataが投げられるので、
$(document).bind("context_show.vakata", function(e) { var menuItem = $("#vakata-contextmenu a[rel=reset_name]").parent("li"); var node = $("#treeview").jstree("get_selected"); if(node.attr("id") == "Project_1"){ menuItem.addClass("jstree-contextmenu-disabled"); } else{ menuItem.removeClass("jstree-contextmenu-disabled"); } }
こんな感じでコンテキストメニューが表示されてから無効化してやればよい。
かなりハックな感じ・・・
ちなみに設定は以下のところにあった。
ただし、初回は初期設定からコピーするので効力はない。
$.vakata.context.data._get_settings().contextmenu.items.rename._disabled = true;
set_focus時に選択されているノードを取得
$("#treeview").bind("set_focus.jstree", function(e, obj) { console.debug($("#treeview .jstree-hovered").parent("li")); });
編集時に編集文字列を自動的に変更
$("#treeview").bind("set_text.jstree", function(e, obj) { $(obj.args[0]).children("input").val("POO"); });
renameはこんな感じ
$("#treeview").bind("rename.jstree", function(e, obj){ var result = obj.rslt; var node = obj.rslt.obj; var rpcFunc; if(Leaf.nodeType(node, "MeasurementLog")) { rpcFunc = "mlog.rename"; } else{ rpcFunc = "project.rename"; } if(result.old_name != result.new_name){ GLOBAL.rpc.call(rpcFunc, [result.obj.attr("id"), result.new_name]); } });