我正在尝试在Web项目中显示树状结构。
我将Symfony 3.4.x与jsTree v3.3.5一起使用。
使用json
和ajax
时无法显示树。
我正在使用官方jstree
documentation中的示例。
如果我以data
格式对json
进行硬编码,则树显示时没有任何障碍,但是当我在调用json
的过程中返回相同的ajax
时-树是未显示(我只有一个项目,显示为文件夹,没有名称)。
我想完全打开所有树节点-因此需要加载所有项目。
我的数据以
json
格式(根据jstree
文档,我使用的是 alternative json表示法)
{"success":true,
"data":[
{"id":"50","parent":"#","text":"test_root"},
{"id":"51","parent":"50","text":"test_1"},
{"id":"123","parent":"51","text":"test_2"},
{"id":"73","parent":"51","text":"test_3"},
{"id":"75","parent":"51","text":"test_4"},
{"id":"76","parent":"51","text":"test_5"},
{"id":"74","parent":"51","text":"test_6"},
{"id":"78","parent":"51","text":"test_7"},
{"id":"124","parent":"51","text":"test_8"},
{"id":"77","parent":"50","text":"test_9"}
]}
使用
jstree
$(document).ready(function()
{
let project_tree;
project_tree = $('#file-tree-json');
project_tree.jstree({
'core':
{
'data':
{
'url': '/tree/prepare',
'dataType': 'json',
'data': function (node) {
console.log(node);
return { 'id': node.id };
},
}
},
"types": {
"root": {
"icon": "lnr lnr-home"
},
"folder": {
"icon": "lnr lnr-folder"
},
"file": {
"icon": "lnr lnr-file-empty"
}
},
"search": {
show_only_matches: true,
search_callback: function (str, node)
{
if (node.text.toLowerCase().indexOf(str) >= 0) { return true; }
}
},
"plugins": [ "types", "search" ]
});
}
我的控制器中的代码以
json
格式准备树项数据
$em = $this->getDoctrine()->getManager();
$repo_file_tree = $em->getRepository('App:FileTree');
try
{
$build_my_tree_json = $repo_file_tree->prepareJsonTree($build_my_tree);
return new JsonResponse([
'success' => true,
'data' => $build_my_tree_json
]);
}
catch (\Exception $exception)
{
return new JsonResponse([
'success' => false,
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
}
jstree
版本我在做什么错了?
也许我忽略了一些细节或技术性吗?
谢谢您的评论和回答。
当我只返回数据时
return new JsonResponse([
$build_my_tree_json
]);
我会这样获得另外的“ []”
[[
{"id":"50","parent":"#","text":"test_root"},
{"id":"51","parent":"50","text":"test_1"},
{"id":"123","parent":"51","text":"test_2"},
{"id":"73","parent":"51","text":"test_3"},
{"id":"75","parent":"51","text":"test_4"},
{"id":"76","parent":"51","text":"test_5"},
{"id":"74","parent":"51","text":"test_6"},
{"id":"78","parent":"51","text":"test_7"},
{"id":"124","parent":"51","text":"test_8"},
{"id":"77","parent":"50","text":"test_9"}
]]
如何从json
或引用内部数组中删除多余的“ []”?
仅当以json
格式返回仅 有关树节点的数据时,此方法有效。
工作示例
return new JsonResponse($build_my_tree_json);
那么如何使jstree
响应中的其他数据与ajax
一起使用?
应该有一种方法可以从包含状态和数据的响应中提取有关树的所有数据(响应显示在我的问题CODE部分中)。
答案 0 :(得分:0)
您的JSON响应的结构不适用于jsTree。 jsTree需要一个节点数组。您的输出结构在数据对象内部有一个数组。您应该在响应中使用以下结构,使其起作用。
[
{
"id": "50",
"parent": "#",
"text": "test_root",
"opened":true
},
{
"id": "51",
"parent": "50",
"text": "test_1"
},
{
"id": "123",
"parent": "51",
"text": "test_2"
},
...
...
]