Итерация ExtJS 3.1 GridPanel с большим источником данных - PullRequest
0 голосов
/ 21 марта 2011

У меня есть GridPanel (var agentGrid в коде), который связан с JsonStore (var agentDataStore в коде).В этом магазине есть поле, в котором отображается таймер, указывающий время, когда агент обслуживания клиентов находится в состоянии.Итак, каждые 15 секунд я запускаю событие (используя setInterval ()), которое обновляет таймер в каждой строке путем итерации JsonStore и обновления соответствующего поля.

Итак, вот событие, которое запускается каждые 15секунд:

Код:

function agentTimerTick() {
    var newTime = getStateTime(); //assume this always works
    agentDataStore.each(function (rec) {
        rec.set('statetimedisplay', newTime); //set the field of the JsonStore to the timer value
    });
    agentDataStore.commitChanges();
}

Однако, как только я получаю около 120 агентов в JsonStore, страница начинает зависать, и Firefox сообщает мне, что мой сценарий занимает слишком много времени для записи.

Итак, мои вопросы: есть ли лучший способ реализовать таймер в каждой строке GridPanel (связанной с JsonStore)?Я понимаю, что итерации не эффективный процесс, но как еще я могу обновить каждую строку?Имейте в виду, мне нужно показать время в состоянии для каждого агента.Я бы предположил, что 200 строк не должны быть так много, чтобы обновить, но, возможно, это так?

1 Ответ

0 голосов
/ 21 марта 2011

Вы можете использовать класс Ext.util.TaskRunner для обновления.Один из методов, который я могу придумать, чтобы избежать «для каждого цикла», заключается в расширении Ext.data.Record для получения нового события и присоединении экземпляра TaskRunner к каждой записи, и событие обновления запускается через каждый интервал времени.Итак, конкретная запись обновляется.

Побочным эффектом будет то, что у вас будет 200 объектов TaskRunner с каждой записью в вашем магазине.Можем ли мы использовать экземпляр Singleton?Я думаю, что вы должны быть в состоянии добавить к этой идее и придумать решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...