我有两个extjs treeStores,一个是temp,另一个是treeStore,由treePanel解释数据。代码:
var treeStore = Ext.create('Ext.data.TreeStore',{
root: {
childrens:[],
expanded: true,
text: 'Services'
}
});
var tempStore = Ext.create('Ext.data.TreeStore',{
autoload: false,
proxy:{
type: 'ajax',
url: 'server.jsp',
reader: {
type:'json'
}
},
clearOnLoad: true,
listeners:{
load:{
fn: afterload
}
}
});
tempStore.load();
function afterload(store)
{
var rootTree = treeStore.getRootNode();
var copyChilds = Ext.clone(store.getRootNode().childNodes);
if(rootTree.hasChildNodes())
{
rootTree.removeAll(false);
}
for(var i=0;i<copyChilds.length;i++)
{
rootTree.appendChild(copyChilds[i]);
}
}
当调用tempStore.load方法时,我将在服务器上发送查询,获取数据,然后将其放在另一个treeStore.p&gt;上。 tempStore使用TaskRunner每3秒重新加载一次:
var taskTree = {
run: reloadTree,
interval:3000 // 1 second
}
var runReloadTreePanel = Ext.create("Ext.util.TaskRunner");
我有复选框,当我将状态更改为true时,跑步者开始工作:
var checkbox = Ext.create('Ext.form.field.Checkbox',{
boxLabel: 'Refresh',
listeners :{
change: {
fn: changeCheckBoxState
}
}
});
function changeCheckBoxState(field,newValue,oldValue)
{
if(newValue)
{
runReloadTreePanel.start(taskTree);
}
else
{
runReloadTreePanel.stop(taskTree);
}
}
问题:
启动后2-3分钟内存开始增长(每10秒3-4MB),因为方法后载内容,即复制数据。是错误还是我做错了什么?也许函数removeAll(false)没有删除treeStore根节点的所有子数据?我使用了很多变体 - 使用Ext.select(..)+ innerHtml清理dom模型元素,尝试使用remove(..)逐个删除记录,但内存增长。 我的treepanel解释所有好的,没有不必要的数据。 有任何想法吗?对不起,如果我的英语不好。(
答案 0 :(得分:0)
我试图将功能负载的内容更改为:
function load(store)
{
var childs = Ext.clone(store.getRootNode().childNodes);
Ext.select('div#treepanel-1032-body div table tbody tr[class^="x-grid-row"]').remove();
treepanel.setRootNode({
text: "Services",
expanded: true,
children: childs
});
我直接删除了dom模型对象,从treepanel存储的配置属性中删除,并设置每3秒新的根,但内存增长,尤其是在IE中。有什么建议吗?