【问题标题】:Sencha Extjs - How to update a grid by setting data in records all at once?Sencha Extjs - 如何通过一次在记录中设置数据来更新网格?
【发布时间】:2013-10-09 22:48:26
【问题描述】:

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

【问题讨论】:

    标签: javascript extjs grid updates multiple-records


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多