Sencha Extjs - Как обновить сетку, установив данные в записях сразу?

У меня есть сетка с более чем 1000 строк (пользователей) и контрольная колонка, которая используется для связи каждого пользователя с другим конкретным экземпляром (например, группой пользователей). Я реализовал кнопку «Выбрать все», которая делает следующее:

   var items = view.store.data.items;
    var dataIndex = 'dataIndexOfCheckColumn';
    var check = true;
    //view.store.suspendEvents();
    for (var i = 0; i < items.length; i++)
    {
        var record = view.store.getAt(i),
        record.set(dataIndex, check);
        this.fireEvent('checkchange', this, i, check, record);
    }
    //view.store.resumeEvents();

Проблема с этим подходом заключается в том, что каждый «набор» записей запускает некоторые события (проверка, отсоединение и т. д.), а для 1000 записей это слишком много. Chrome делает это почти за одну секунду, но IE (9,10) — это боль в «...» -> почти 2 минуты.

Есть ли другой способ сделать это? Я думаю о приостановке событий в магазине, затем их возобновлении и синхронизации хранилища с сеткой, но я не нашел в документах, как добиться чего-то подобного.

Я использую ExtJs версии 4.0.1.


person darkdante    schedule 03.10.2013    source источник


Ответы (1)


Мне удалось решить эту проблему, приостановив и возобновив события, а затем обновив представление. В случае, если это кому-то нужно:

var items = view.store.data.items
    var dataIndex = 'dataIndexOfCheckColumn';
    var check = true;
    /*suspend events to block firing the events on setting record values
    then resume and refresh the view
    */
    view.store.suspendEvents();
            for (var i = 0; i < items.length; i++)
            {
                var record = view.store.getAt(i);
                record.set(dataIndex, check);
                this.fireEvent('checkchange', this, i, check, record);
            }
            view.store.resumeEvents();
            view.getView().refresh();
person darkdante    schedule 03.10.2013