【问题标题】:Binding json parent-child list to jstree将json父子列表绑定到jstree
【发布时间】:2019-05-27 13:26:06
【问题描述】:

我有一个嵌套对象列表(父子对象),我使用 jstree 插件来分层显示它们。

数据库列表:

 ID  Name  ParentId

    1   A     NULL
    2   B     NULL
    5   a1    1
    6   b1    2
    9   a11   5
    10  a12   5
    11  b12   6

将列表转换为 json 与他们的孩子:

 [{"children":[{"children":[{"children":[],"id":9,"text":"a11","ParentId":5},{"children":[],"id":10,"text":"a12","ParentId":5}],"id":5,"text":"a1","ParentId":1}],"id":1,"text":"A","ParentId":null},{"children":[{"children":[{"children":[],"id":11,"text":"b12","ParentId":6}],"id":6,"text":"b1","ParentId":2}],"id":2,"text":"B","ParentId":null},{"children":[{"children":[],"id":9,"text":"a11","ParentId":5},{"children":[],"id":10,"text":"a12","ParentId":5}],"id":5,"text":"a1","ParentId":1},{"children":[{"children":[],"id":11,"text":"b12","ParentId":6}],"id":6,"text":"b1","ParentId":2},{"children":[],"id":9,"text":"a11","ParentId":5},{"children":[],"id":10,"text":"a12","ParentId":5},{"children":[],"id":11,"text":"b12","ParentId":6}]

ajax:

  success: function (x) {
     $('#jstree').jstree({
                  'core': {
                        'data': jQuery.parseJSON(x)
                           }
     });  }      

问题是当 json 对象第一次加载到页面时,jstree 会显示所有节点,甚至是它们的子节点;在同一级别。只有当我花费一个父节点时,孩子才会正确地来到他们的父母之下并从第一级消失。 为什么会这样?谢谢。

【问题讨论】:

  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 我建议您编辑您的问题:C# 和您的数据库代码都与问题无关,这就是为什么 jsTree 对您的 JS 结构不满意。
  • @vorou 谢谢,但我认为 c# 代码是相关的,因为它在那里创建了分层列表结构。您能否更具体地指出问题所在?

标签: jquery json list parent-child jstree


【解决方案1】:

尽管 JSON 数据的结构格式正确,但分配的“id”值并不是唯一的。根中的一些节点与一些嵌套的子节点具有相同的 id。这会在树数据中产生冲突,因为 jsTree 需要唯一的 id。如果您可以计算整个树中节点的唯一 id 值,那么它将起作用。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多