如何阻止extjs treepanel无限加载?

时间:2012-02-16 12:39:27

标签: extjs4 treepanel

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

现在我的Tree面板无限加载相同的数据。 Treepanel看起来如下:

treepanl screen shot

我的部分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节点后,它再次加载了国家/地区级别的数据(即国家/地区名称US,uk,India,UK)。实际上我想显示州级数据,如马哈拉施特拉邦,果阿的数据。而不是那个treepanel再次加载相同的数据。

如何避免这种行为?我已将US,uk和India节点的leaf属性设置为false

我尝试将Expanded属性设置为true但是树形图一次又一次地加载相同的节点,我的浏览器标签就被挂起了。

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


编辑 - 此问题的解决方案

我通过在append商店事件上添加侦听器,然后将leaf值设置为true来解决我希望成为叶子的节点,从而解决了这个问题。

6 个答案:

答案 0 :(得分:4)

我的treepanel和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
}

我为“instanceList”更改了“children”,我的treepanel停止了无限循环,所以我想如果你改变“孩子”的“名字”?

答案 1 :(得分:2)

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

答案 2 :(得分:2)

将数据项设置为:

{
    ...
    leaf: true
}

会阻止它。

答案 3 :(得分:1)

确保所有没有任何孩子的父母“leaf”设为“true”或 有一个空“子节点”

AND 所有子节点“leaf”设置为“true”(正如Asken已经提到的那样)

答案 4 :(得分:1)

在我看来,任何孩子都成为其家属的根。所以root属性和children属性必须具有相同的名称。我很高兴我发现了这个问题。它挽救了我的生命,因为无休止地重新装载树,我正要开枪自杀

答案 5 :(得分:0)

正如Edd所说,如果您设置代理自定义rootProperty:' instanceList',您必须更改所有"孩子"在json中的那个属性,即' instanceList'。这是我的解决方案。