【问题标题】:How "id" works in populating jsTree using JSON“id”如何使用 JSON 填充 jsTree
【发布时间】:2018-01-04 16:04:31
【问题描述】:

我正在使用另一种 JSON 格式来填充我的 jsTree,如 link. 所示

问题是我在 jsTree 中找不到“id”属性是如何工作的?

就我而言,有时父母双方可以有相同的名字。 (它并不理想,但它是一种罕见的情况,所以我必须处理它)。所以我在树中使用他们独特的“id”。现在,如果父节点的子节点与父节点具有相同的“id”,则 jsTree 在按钮单击时无法工作并继续显示“正在加载..”消息。

我的 JSON:

[
  {
    "id": "3",         //Any value except 3 and 5 works
    "text": "Ford",
    "parent": "3",
    "icon": "fa fa-circle-o"
  },
  {
    "id": "5",        //Any value except 3 and 5 works
    "text": "Fiat",
    "parent": "5",
    "icon": "fa fa-circle-o"
  },
  {
    "id": "3",
    "text": "Cars",
    "parent": "#",
    "icon": "glyphicon glyphicon-triangle-right"
  },
  {
    "id": "5",
    "text": "Cars",
    "parent": "#",
    "icon": "glyphicon glyphicon-triangle-right"
  }
]

我的html代码:

 <div id="car-list" class="collapse">
                       #{MyBean.jsonString}
                   </div>
                   <h:outputScript>
                       $(function() {
                           var data1= JSON.parse(document.getElementById("car-list").innerHTML);
                           $('#car-list').jstree({
                               'core': {
                                   'data': data1
                               }
                           });
                       });
                   </h:outputScript>

其中jsonString是一个包含上述json的String对象

【问题讨论】:

    标签: javascript jquery json jstree


    【解决方案1】:

    在 jstree 中,每次我有 2 个相同的键时,我只能看到一个呈现的元素而不是 2 个(谈论具有相同键的元素)。在您的情况下,我认为问题在于您的节点中有循环,因此渲染永远不会结束。通过从串联(parentKey_childKey)创建键,我解决了我的问题。所以在你的情况下,这将是:

    [
      {
        "id": "3_3",         
        "text": "Ford",
        "parent": "3",
        "icon": "fa fa-circle-o"
      },
      {
        "id": "5_5",        
        "text": "Fiat",
        "parent": "5",
        "icon": "fa fa-circle-o"
      },
      {
        "id": "3",
        "text": "Cars",
        "parent": "#",
        "icon": "glyphicon glyphicon-triangle-right"
      },
      {
        "id": "5",
        "text": "Cars",
        "parent": "#",
        "icon": "glyphicon glyphicon-triangle-right"
      }
    ]
    

    您还可以看到不支持具有相同密钥的多个节点here

    【讨论】:

    • 节点中的循环是什么意思?
    • 您提供的 parentId 与 id 相同。因此,这会以某种方式尝试同时呈现与父节点和子节点相同的节点。
    • 您能否参考我阅读此行为的文档。正如我在问题中提到的,我找不到描述“id”如何工作的文档
    • old.jstree.com/faq 这里的旧文档说 jstree 将 ids 用于 jquery 选择器。 Html id 应该是唯一的。至于渲染过程,我说的是怀疑,因为我不参与jstree的实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2019-06-29
    • 2023-03-20
    • 2016-07-23
    相关资源
    最近更新 更多