3

我有一个包含超过 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

4

1 回答 1

3

我设法通过暂停和恢复事件来解决这个问题,然后刷新视图。如果有人需要这个:

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();
于 2013-10-03T11:08:42.110 回答