重新渲染组件后,ExtJS 4.2.1 Treeview节点会出现混乱

重新渲染组件后,ExtJS 4.2.1 Treeview节点会出现混乱,extjs,extjs4.2,Extjs,Extjs4.2,在从4.1.1升级到4.2.1之后,我正在进行一个bug修复,并且已经被一个treeview阻塞了一段时间 首次启动应用程序后(或页面刷新后)组件的外观: 问题描述:主屏幕左侧有一个树状视图(类别),其余屏幕上有一个网格(带产品)。第一次打开屏幕后,树中的类别将按预期显示。但是,当我点击一个重新加载按钮时,它会再次加载树存储和网格存储,这里一些类别会加倍(我猜所有的二级节点都加倍)。AJAX请求在每个请求上返回相同的数据 甚至更奇怪的情况是:如果我打开另一个组件,然后回到这个屏幕上,类别就会

在从4.1.1升级到4.2.1之后,我正在进行一个bug修复,并且已经被一个treeview阻塞了一段时间

首次启动应用程序后(或页面刷新后)组件的外观:

问题描述:主屏幕左侧有一个树状视图(类别),其余屏幕上有一个网格(带产品)。第一次打开屏幕后,树中的类别将按预期显示。但是,当我点击一个重新加载按钮时,它会再次加载树存储和网格存储,这里一些类别会加倍(我猜所有的二级节点都加倍)。AJAX请求在每个请求上返回相同的数据

甚至更奇怪的情况是:如果我打开另一个组件,然后回到这个屏幕上,类别就会呈现得一团糟

以下是JSON响应(始终不变):

{
“用户”:{},
“数据”:{
“儿童”:[
{
“类别应用程序”:[{“名称”:“默认文本”,“域名id”:“17”}],
“扩展”:错误,
“可扩展”:错误,
“id”:“带有未分配产品的类别”,
“徽标”:“,
“儿童”:[]},
{
“类别应用程序”:[{“类别应用程序id”:“8390”,“域名应用程序id”:“17”,“是否处于活动状态”:“1”,“名称”:“主类别”,“名称应用程序类型”:“文本”,“url应用程序路径”:“\/main category”}],
“类别识别号”:“8390”,
“级别”:0,
“事件id”:“1331”,
“扩展”:是的,
“可扩展”:错误,
“id”:“主要类别”,
“logo”:“\/media\/\/event\/1331\/categories\/8390\u 1376315425.jpg”,
“图像”:“\/event\/1331\/categories\/8390\u 1376315425.jpg”,
“儿童”:[
{
“扩展”:是的,
“类别识别号”:“8598”,
“可扩展”:错误,
“徽标”:“\/media\/\/event\/1331\/categories\/8598\u 1376315425.jpg”,
“图像”:“\/event\/1331\/categories\/8598\u 1376315425.jpg”,
“级别”:“1”,
“儿童”:[
{
“扩展”:错误,
“类别识别号”:“8599”,
“可扩展”:错误,
“徽标”:“\/media\/\/event\/1331\/categories\/8599\u 1376315425.jpg”,
“图像”:“\/event\/1331\/categories\/8599\u 1376315425.jpg”,
“级别”:“2”,
“儿童”:[…],
“类别应用程序”:[{“类别应用程序id”:“8599”,“域名id”:“17”,“是否处于活动状态”:“1”,“名称”:“子类别”,“名称类型”:“文本”,“url路径”:“\/主类别\/主类别\/子类别”}]
}
],
“类别应用程序”:[{“类别id”:“8598”,“域名id”:“17”,“是否处于活动状态”:“1”,“名称”:“主子类别”,“名称类型”:“文本”,“url路径”:“\/主类别\/主子类别”}]
}
]
}
]
}
}
下面是负责附加子节点的代码-但在调试之后,我知道在处理根的第二个子节点(参见上面的JSON)之后,树中的节点立即显示为加倍和/或混乱

appendChildToRecord:函数(子、记录、存储)
{
变量数据={};
data[store.proxy.reader.root]=子级;
var newRecords=store.proxy.reader.read(data.records);
记录。追加子项(新记录);
返回新记录[0];
}
非常感谢您的任何想法、想法和帮助

更新:如果我将ExtJS切换回版本4.1.1,则树总是正确加载-因此,很明显,只有切换到版本4.2.1后才会出现问题。我甚至无法在调试时揭示问题-在某个点上,主_类别的整个节点子树会立即呈现并弄乱

更新2:通过调试整个树构建过程,我发现在重新加载时,类别及其子级的处理顺序错误。我所说的“处理”是指采取以下步骤:

  • 获得第一级第一类
  • 添加到根
  • 进程
    子进程
    (递归,从点1开始。)
  • 从该类别的源中删除子项
  • 在首次加载时,类别按正确的顺序进行处理

  • 第1级
  • 第1级
  • 第二级
  • 第三级
  • 第二级
  • 第三级
  • 在第二次和每次加载时(不刷新浏览器窗口),顺序发生变化-第一级的第二个类别作为最后一个类别进行处理,因此再次添加第二级类别,因此它们加倍


    因此,问题是:为什么在重新加载存储时类别(节点/记录)顺序会改变?我确信并检查了JSON响应没有改变,并且始终是相同的…

    经过几个小时的深入调试后,我发现根节点(存储中定义的一个)是保持其以前的状态,因此在每次重新加载尝试中,
    expanded
    属性保持
    true

    这导致了第一级类别的问题,因为ExtJS认为它已经可见(添加到扩展的根目录中),并且可以直接处理子类别。因此,第二个一级类别作为最后一个类别进行了处理-它没有被删除-再次添加(附加)子类别

    修复:在每个
    树之前.store.load()我必须设置根的
    扩展