如题,纠结死了 一个页面分模块展现多个tree ,一个模块一个treepanel 没图说个JB,上图:我现在的思路是这样的:一个模块用了一个单独的treepanel,一个单独的方法 。 但是现在出现问题了 。 如图  数据乱了。是偶尔乱   不是每次都乱,后台跟踪没错误。是前台解析错了。在FF下跟踪。如图
请求不同,但是获取的返回结果相同。后台跟踪没错,如图
网上说是loader的ID重复了   我这里没用ID   后来加上ID   也是这个样。随机出现错误。不是每次都出现。
不说了 ,上代码看看!//待办事项菜单开始
var personalloader= new Ext.tree.TreeLoader({
});
var personaltreePanel = new Ext.tree.TreePanel({
title: '个人事务',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : personalloader
});
var personalroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "个人事务"
});
personaltreePanel.setRootNode(personalroot);
personaltreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
personalloader.dataUrl = basepath + "base/getBackLogMenus_SysMenuAction.action";
personalloader.baseParams.type = "dynamicLoadTreePanel";
personalloader.baseParams.backLogmenuCode = node.attributes.menuCode;
});
//root.expand(true,true);  
//绑定鼠标单击事件
personaltreePanel.on('click', treeClick);
    //待办事项结束
    //我的工作菜单开始
    var myworkloader= new Ext.tree.TreeLoader({
    });
var myworktreePanel = new Ext.tree.TreePanel({
title: '我的工作',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : myworkloader
});
var myworkroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "我的工作"
});
myworktreePanel.setRootNode(myworkroot);
myworktreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
myworkloader.dataUrl = basepath + "base/getMyWorkMenus_SysMenuAction.action";
myworkloader.baseParams.type = "dynamicLoadTreePanel";
myworkloader.baseParams.myWorkmenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
myworktreePanel.on('click', treeClick);
//我的工作菜单结束
//承揽管理菜单开始
    var hireloader= new Ext.tree.TreeLoader({
    });
var hiretreePanel = new Ext.tree.TreePanel({
title: '承揽管理',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : hireloader
});
var hireroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "承揽管理"
});
hiretreePanel.setRootNode(hireroot);
hiretreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
hireloader.dataUrl = basepath + "base/getHirekMenus_SysMenuAction.action";
hireloader.baseParams.type = "dynamicLoadTreePanel";
hireloader.baseParams.hiremenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
hiretreePanel.on('click', treeClick);
//承揽管理菜单结束
//工程施工菜单开始
    var engineeringloader= new Ext.tree.TreeLoader({
    });
var engineeringtreePanel = new Ext.tree.TreePanel({
title: '工程施工',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : engineeringloader
});
var engineeringroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "工程施工"
});
engineeringtreePanel.setRootNode(engineeringroot);
engineeringtreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
engineeringloader.dataUrl = basepath + "base/getEngineerMenus_SysMenuAction.action";
engineeringloader.baseParams.type = "dynamicLoadTreePanel";
engineeringloader.baseParams.engineermenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
engineeringtreePanel.on('click', treeClick);
//工程施工菜单结束
//安全质量管理菜单开始
    var safeloader= new Ext.tree.TreeLoader({
    });
var safetreePanel = new Ext.tree.TreePanel({
title: '安全质量管理',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : safeloader
});
var saferoot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "安全质量管理"
});
safetreePanel.setRootNode(saferoot);
safetreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
safeloader.dataUrl = basepath + "base/getSafeMenus_SysMenuAction.action";
safeloader.baseParams.type = "dynamicLoadTreePanel";
safeloader.baseParams.safemenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
safetreePanel.on('click', treeClick);
//安全质量管理菜单结束
//综合管理菜单开始
    var multipleloader= new Ext.tree.TreeLoader({
    });
var multipletreePanel = new Ext.tree.TreePanel({
title: '综合管理',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : multipleloader
});
var multipleroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "综合管理"
});
multipletreePanel.setRootNode(multipleroot);
multipletreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
multipleloader.dataUrl = basepath + "base/getIntegratedMenus_SysMenuAction.action";
multipleloader.baseParams.type = "dynamicLoadTreePanel";
multipleloader.baseParams.integratedmenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
multipletreePanel.on('click', treeClick);
//综合管理菜单结束
//系统管理菜单开始
    var systemloader= new Ext.tree.TreeLoader({
    });
var systemtreePanel = new Ext.tree.TreePanel({
title: '系统管理',
autoScroll:true,//带下拉滚动条
animate : true,// 以动画形式伸展,收缩子节点
rootVisible : false,
//root: root,
border : false,
useArrows : false,// 是否显示小箭头
loader : systemloader
});
var systemroot = new Ext.tree.AsyncTreeNode({// 定义根节点
text : "系统管理"
});

systemtreePanel.setRootNode(systemroot);
systemtreePanel.on("beforeload", function(node) {// 在beforeload事件中动态传递参数,对于TreePanel不能像GridPanel和ComboBox用Store的load传递参数,但是可以使用beforeload方法,而且这种方法也同样适用于前两者
systemloader.dataUrl = basepath + "base/getSystemMenus_SysMenuAction.action";
systemloader.baseParams.type = "dynamicLoadTreePanel";
systemloader.baseParams.systemmenuCode = node.attributes.menuCode;
});
// 绑定树的点击事件
systemtreePanel.on('click', treeClick);
//系统管理菜单结束
求指教啊!!!!!纠结死我了!EXTTREEjavascript数据混乱

解决方案 »

  1.   

    那必然是数据引起的,定位getBackLogMenus_SysMenuAction这个action
      

  2.   

    ID对了没有,每个树的ID要不一样才行。
      

  3.   

    应该是异步错误。
    TreeLoader...为什么不用treeStore?不要几个tree同时load,当该panel展开时再load
      

  4.   

    我没加ID    ,加了ID之后也是这个样子
      

  5.   

    咱俩想的差不多   我觉得也是异步的问题。我试试用用treestore  
      

  6.   

    给每个tree分配一个单独的store
      

  7.   

    ext 3.0 好像没store吧?  我现在是每个treepanel 单独的treeloader   应该差不多吧?  有没有同步的方式?  或者实现这种效果有没有别的思路呢?
      

  8.   

    解决了    struts 映射属性用的同一个,分开来就好了