我有一个包含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
我设法通过暂停和恢复事件来解决此问题,然后刷新视图。如果有人需要这个:
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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句