我有一个jstree工作,现在希望能够将某些类型的节点拖动到外部div元素(包含由highcharts生成的图表)。我实际上并不希望从树中删除节点,也不想要节点的副本。我只想要删除节点以使用节点的ID更新图表。
我想我可以计算出图表更新位,但这是使用jstree进行拖放的过程我发现有点令人困惑。另外,我只希望某些类型的节点可以拖动(任何属性为rel =“ds”)。
我正在苦苦挣扎,并没有走得太远。这是我必须去的地方:
$("#statstree").jstree({
"json_data" : {
"ajax" : {
"url" : "test.json",
"data" : function (n) {
return { id : n.attr ? n.attr("id") : 0 };
},
"progressive_render" : true
}
},
"types" : {
"valid_children" : [ "root" ],
"types" : {
"folder" : {
"icon" : {
"image" : "images/folder.png"
},
"valid_children" : [ "default" ],
//"max_depth" : 2,
"hover_node" : true,
"show_checkboxes" : false
},
"default" : {
"icon" : {
"image" : "images/folder.png"
},
"valid_children" : [ "default" ]
},
"hover_node" : false
}
},
"themes" : {
"theme" : "classic",
"dots" : false,
"icons" : true
},
"core" : { "html_titles" : true },
"dnd" : {
"drop_target" : "#test_area",
"drop_finish" : function (data) {
if(data.o.attr("rel") === "ds") {
//update chart with new data here?
//using data.o.attr("id")
}
}
},
"crrm" : { move : { check_move : function (m) { return false; } } },
"plugins" : ["themes","json_data","dnd","ui","types","crrm"]
});
我在某处读到绑定'before.jstree'事件可以帮助阻止某些节点被拖动(以及crrm位)。但我认为我做错了。似乎“start_drag”无法访问data.args [0]:
$("#statstree").bind("before.jstree", function (e, data) {
if(data.func === "start_drag" && data.args[0].parent("li").attr("rel") != "ds") {
e.stopImmediatePropagation();
return false;
}
});
任何人都有任何想法如何才能完成这项任务?
干杯:)
编辑:我已经解决了如何阻止非'ds'节点被丢弃的问题:
"drag_check" : function (data) {
if(data.r.attr("rel") != "ds") {
return false;
}
return {
after : false,
before : false,
inside : true
};
}
我现在要改进我的问题:
如果我有多个drop_targets,如何获取目标ID? “drop_target”:“#testarea1,#testarea2”
编辑2
多哈,在我走的时候回答我的问题!而且我现在已经坐了好几年了。这一切都在我身边闪过:data.r.attr( “ID”)
编辑3
现在唯一剩下的问题是,尽管所有没有rel =“ds”属性的节点都不能“丢弃”到外部div / chart中,但当它们悬停在外部div / chart上时,它们仍会显示一个jstree绿色勾号图标允许的区域。任何想法如何阻止这种情况发生?