1

最后,在 extjs 树面板、树存储和构建自定义阅读器以读取和转换 pentaho 数据 2 周后,我设法将 pentaho 数据加载到 extjs 的树面板中。

现在我的树面板无限加载相同的数据。Treepanel 如下所示:

树盘屏幕截图

我的部分 json 数据如下所示:

{
    {name: 'US', candidateCount: 3, children: []},
    {name: 'India', candidateCount: 922, children: [
       {name: 'Goa', candidateCount:124, children: []},
       {name: 'Maharashtra', candidateCount: 43, children: [
             {name: 'Pune', candidateCount: 3},
             {name: 'Mumbai', candidateCount: 33},
             {name: 'Kolhapur', candidateCount: 4},
             {name: 'XXX', candidateCount: 3},
        ]}
     ]},
    {name: 'UK', candidateCount: 1, children: []},
}

如上图所示,扩展India节点后,它再次加载了国家级别的数据(即国家名称美国、英国、印度、英国)。实际上,我想显示州级数据,例如果阿马哈拉施特拉邦的数据。而不是该树形面板再次加载相同的数据。

如何避免这种行为?我已经将leaf美国、英国和印度节点的属性设置为false.

我尝试将Expanded属性设置为,true但随后 treepanel 不断加载相同的节点,并且我的浏览器选项卡被挂起。

请告诉我如何避免这种情况?我希望树面板只加载一次数据。


编辑 - 这个问题的解决方案

我通过在存储事件上添加侦听器append然后为我想成为叶子的节点设置leaf值来解决这个问题。true

4

6 回答 6

4

我的树形面板和 JSON 数据也有同样的问题。我的 treeStore 看起来像这样:

proxy: {
        type: 'ajax',
        url: 'urlJson',

        reader: {
            type: 'json',
            root: 'instanceList',
            successProperty: 'success'
        }
    },

    root:{
        text: 'Root',
        expanded: true
    }

和 JSON

{
    "instanceList": [
        {
            "text": "Parent 1",
            "instanceList": [
                {
                    "class": "testing",
                    "id": 3,
                    "leaf": true,
                    "text": "Child 1"
                }
            ]
        },
        {
            "text": "Parent 2",
            "instanceList": [
                {
                    "class": "testing",
                    "id": 2,
                    "leaf": true,
                    "text": "Child 2"
                },
                {
                    "class": "testing",
                    "id": 1,
                    "leaf": true,
                    "text": "Child 3"
                }
            ]
        }
    ],
    "instanceTotal": 1,
    "success": true
}

我将“children”更改为“instanceList”并且我的树形面板停止了无限循环,所以我猜如果您将“name”更改为“children”?

于 2012-02-28T16:26:42.800 回答
2

加载树可能会欺骗。尝试loaded: true在这些节点上进行设置。在开始点击之前,树是否正确加载?

于 2012-02-16T13:33:57.130 回答
2

将数据项设置为:

{
    ...
    leaf: true
}

会阻止它。

于 2012-02-16T13:35:17.770 回答
1

确保所有没有孩子的父母都将“叶子”设置为“真”或有一个空的“孩子”节点

并且所有子节点都将“叶子”设置为“真”(正如 Asken 已经提到的)

于 2013-01-23T10:44:48.733 回答
1

在我看来,任何孩子都会成为其家属的根。所以根属性和子属性必须具有相同的名称。我很高兴我找到了这个胎面。它救了我的命,因为没完没了地重新加载树,我正要开枪

于 2015-07-23T21:57:09.660 回答
0

正如 Edd 所说,如果您在代理自定义 rootProperty:'instanceList' 中设置,则必须将 json 中的所有“子项”更改为该属性,即“instanceList”。这是我的解决方案。

于 2014-08-26T13:08:21.953 回答