2

私は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つずつ削除しようとしますが、メモリが増大します。私のツリーパネルは、不要なデータなしで、すべてを適切に解釈します。何か案は?私の英語が上手くなければごめんなさい。(

4

1 に答える 1

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ではメモリが増大します。何かアドバイスはありますか?

于 2012-11-13T14:39:17.943 に答える