私は2つのextjstreeStoreを持っています。1つはtempで、もう1つは作業中の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に配置します。> 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(..)を使用してレコードを1つずつ削除しようとしますが、メモリが増大します。私のツリーパネルは、不要なデータなしで、すべてを適切に解釈します。何か案は?私の英語が上手くなければごめんなさい。(