Обновление EXTJS 4 Treepanel периодическое - PullRequest
3 голосов
/ 20 апреля 2011

Я хотел бы создать 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 ]

2 голосов
/ 08 мая 2012

Если вы хотите добавить какой-либо новый узел и не хотите перезагружать весь магазин, вы можете добавить вот так

 //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 Class.

, ознакомьтесь с Документация API EXTJS даст вам более подробную информацию.

2 голосов
/ 21 апреля 2011

Есть один способ: Вы можете загрузить свои узлы в какое-либо временное хранилище и изменить узел хранилища основного дерева на узел

1 голос
/ 18 декабря 2013

Магазин привязан к Treepanel, как сетка и магазин, поэтому вы можете получить Магазин из панели дерева с помощью

var store=treepanel.getStore()

и вы можете перезагрузить магазин с филиалом, который вам нужно обновить с помощью

store.load({node:selectedNode})
0 голосов
/ 27 ноября 2012

Вы можете использовать TaskManager для этого:

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

Это будет выполнять функцию reloadStoreFunction каждую секунду.

...