* jsTreeの研究 [#u23c917a]
#anno1(2011-01-18)
** コンテキストメニューハック [#m07b7e5c]
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時に選択されているノードを取得 [#bda72790]
$("#treeview").bind("set_focus.jstree", function(e, obj) {
console.debug($("#treeview .jstree-hovered").parent("li"));
});
** 編集時に編集文字列を自動的に変更 [#v5b73d23]
$("#treeview").bind("set_text.jstree", function(e, obj) {
$(obj.args[0]).children("input").val("POO");
});
** renameはこんな感じ [#o711b617]
$("#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]);
}
});