Extjs4.x ,tree.getStore().load(); 重复加载多次的问题,

使用 tree.getStore().load() 时,虽然最后都重新加载了,但居然会访问服务器十多次,这可如何是好?

关键自带如下:
[code="js"]
var store = Ext.create('Ext.data.TreeStore', {
fields:[{name:"url",type:"string"},{name:"pids",type:"string"},{name:"text",type:"string"}],
root: {
expanded:true,
text:"Root",
id:"0",
pids:"0,"
} ,
proxy: {
type: 'ajax',
url: '/getMenuData',
extraParams: {"test": "1"},
method: "POST",
reader: {
type: 'json'
}
},
autoLoad: true
});

var tree = Ext.create('Ext.tree.Panel', {
layout:'fit',
width: 200,
bodyPadding: 5,
store: store,
autoDestroy:true,
rootVisible:true,
title:"测试"
});

[/code]

,使用 tree.getStore().load()方法的时候,
怎么会重复加载多次?
怎么会这样?

贴上去 就解决了

/*
Overrides for fixing clearOnLoad for TreeStore
*/
Ext.override(Ext.data.TreeStore, {
load: function(options) {
options = options || {};
options.params = options.params || {};

var me = this,
node = options.node || me.tree.getRootNode(),
root;

// If there is not a node it means the user hasnt defined a rootnode yet. In this case lets just
// create one for them.
if (!node) {
node = me.setRootNode({
expanded: true
});
}

if (me.clearOnLoad) {
node.removeAll(false);
}

Ext.applyIf(options, {
node: node
});
options.params[me.nodeParam] = node ? node.getId() : 'root';

if (node) {
node.set('loading', true);
}

return me.callParent([options]);
}
});

[code="java"]
// 自动加载 如果你会手动调用load() 的话,这里可以不自动加载.
autoLoad: true

// 至于你说的会加载10多次...你可以检查一下,是不是绑定了多次事件.或者在load()的// 时候,断点,看是否调用了10多次.
[/code]

树的加载是可以分层次的,即一次加载一个节点的直属子节点。

我猜你后面肯定有调用什么递归展开之类的逻辑,也可能Ext4.x自带的递归加载(4.x没怎么用过),当树节点层次较多时会层层加载,发出多个请求;也有可能你的树只有一层,但叶子节点没有设定leaf:true,导致Ext也去尝试加载子节点;

我貌似也遇到这个问题了。加载超慢。
求解。

你要在返回的数据中显式地声明节点为叶子节点: leaf: true
否则树组件以为它有子节点,去尝试加载

抱歉,没看到你的补充说明,你说的“但如果放在事件里面”是什么意思?是什么事件?

记得给分啊