3

我想创建一个Treepanel,每秒更新一次。所以我拿了一家带有数据采集代理的商店:

store = new Ext.data.TreeStore({
    model: 'TaskState',
        proxy: {
        type: 'ajax',
        url : '/getTaskList'
},
    root: {
        expanded: true
}});

商店似乎工作,数据显示在我的TreePanel.

我尝试Treepanel使用此功能更新:

function refresh(){
        store.load();
        window.setTimeout("refresh()", 1000);
    }

更新似乎也有效。不幸的是,更新在每次更新时都会导致某种“闪烁”效果,因为重新加载了整个树。我正在寻找一种仅刷新已更改节点的方法。

有没有办法做到这一点?

问候

4

4 回答 4

2

有一种方法:您可以将节点加载到某个临时存储并逐个更改主树的存储节点

于 2011-04-20T21:24:36.220 回答
2

如果您想添加任何新节点并且不想重新加载整个商店,那么您可以像这样添加

 //overModel is Ext.data.Model
 overModel.appendChild({
                        id: responseJson.data['id'],
                        text:responseJson.data['text'],
                        children:responseJson.data['children'],//array of childern
                        parent_id:responseJson.data['parent_id']

  });
  overModel.expand();

如果你想加载整个商店,你可以做这样的事情

Ext.data.StoreManager.lookup('StoreName').load({ params: {"p1": p1}});

加载商店。要定期更新商店,您可以使用DelatedTask类。

查看 EXTJS 的文档 API将为您提供更多详细信息。

于 2012-05-08T13:05:36.437 回答
1

商店是像网格和商店一样绑定Treepanel,所以你可以从树面板中获取商店

var store=treepanel.getStore()

您可以使用需要更新的分支重新加载商店

store.load({node:selectedNode})
于 2013-12-18T10:05:43.943 回答
0

您可以为此使用TaskManager

Ext.TaskManager.start({
    run: reloadStoreFunction,
    interval: 1000
});

这将每秒执行一次 reloadStoreFunction。

于 2012-11-26T22:14:16.100 回答