【发布时间】:2017-11-14 16:59:36
【问题描述】:
我正在开发一个需要构建分层导航菜单的项目。 jstree 看起来不错。
树将被保存到数据库中 - 我计划使用 CakePHP 的 Tree Behaviour(由于现有的代码库,该项目必须在 Cake 2.x 而不是 3.x 中工作)。
我需要做的一件事是能够从外部数据源将“标签”添加到我的树中。
我的配置方式如下:
填充我的 jstree 的数据来自数据库表(由于 Cake 的命名约定,称为 navigations)。它使用上面树行为链接中给出的表结构。
我正在使用 ajax 方法将此数据加载到 jstree 中:
$.ajax({
type : "GET",
url : "/ajax_get_tree",
dataType : "json",
success : function(json) {
createJSTrees(json);
},
error : function(xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
function createJSTrees(jsonData) {
$("#tree").jstree({
'core': {
"check_callback" : true,
'data' : jsonData
},
"plugins" : ["dnd"]
}).on('loaded.jstree', function() {
$("#tree").jstree('open_all');
});
}
我想要做的是将“标签”(我的意思是列表项)从单独的 div #tagList 拖放到树上的元素中。标签数据格式如下:
<div id="tagList">
<li data-tag="1">United Kingdom</li>
<li data-tag="2">France</li>
<li data-tag="3">Germany</li>
</div>
我知道可以使用诸如 jqueryui 的 draggable 行为之类的东西将它们从一个 div 移动到另一个(从 #tagList 到 #tree)。
但是,我不知道如何“删除”标签,以便 jstree 将其列在适当的节点下。
例如我已经尝试过这个 - 它只是使用 jqueryui 并且与 jstree 除了引用它运行的 div 之外没有任何关系:
$('#tagList li').draggable({
cursor: 'move',
helper: 'clone',
connectToSortable: "#tree",
});
我的问题真的是我正在尝试做的事情是否可能?我花了很长时间研究这个问题,但我觉得我无处可去。
还有其他可以完成此类任务的东西吗?我已经看了看,但找不到任何东西。本质上,要求是能够创建树(名称、编辑、删除、拖放),然后还能够将标签(#tagList 中的<li> 元素)放入其中并保存。
【问题讨论】:
-
这在某种意义上是可以做到的。您将需要一个“放置”目标,当您在其上
drop一个项目时,这将触发一个可以执行任务的回调。到目前为止,您尝试过什么? -
你的
core应该有data: { data: function() }吗?
标签: jquery html jquery-ui cakephp jstree