Jacobian
Jacobian

Reputation: 10872

ExtJS 6. grid checkbox model with suppressed events

I have a grid with thousands of records. It works almost fine. When I programmatically call this method:

selectionModel.selectAll(true);

it works great. My script is not freezed, because of this true parameter, which according to docs suppresses any select events. However, when I select all records via a header checkbox (which selects and deselects all records), my script gets freezed. I guess, it is because by default select events are not suppressed. I tried to find a config, which globally supresses select events, but could not find it. So, my question is how can I fix this issue? How can I globally suppress select events in my grid selModel?

Upvotes: 0

Views: 373

Answers (2)

Narendra Jadhav
Narendra Jadhav

Reputation: 10272

You can handle using overriding onHeaderClick method of grid CheckboxModel.

In this Fiddle, I have created a demo using same method onHeaderClick.

CODE SNIPPET

Ext.application({
    name: 'Fiddle',

    launch: function () {
        var store = Ext.create('Ext.data.Store', {
            fields: ['number'],
            data: (() => {
                let data = [];
                for (let i = 1; i <= 50000; i++) {
                    data.push({
                        'number': i
                    })
                }
                return data;
            })()
        });

        Ext.create('Ext.grid.Panel', {
            title: 'Demo',
            store: store,
            itemId: 'demogrid',
            columns: [{
                text: 'Number',
                flex: 1,
                dataIndex: 'number'
            }],
            height: window.innerHeight,
            renderTo: Ext.getBody(),
            selModel: {
                checkOnly: false,
                mode: 'SIMPLE',
                onHeaderClick: function (headerCt, header, e) {
                    var me = this,
                        store = me.store,
                        isChecked, records, i, len,
                        selections, selection;

                    if (me.showHeaderCheckbox !== false && header === me.column && me.mode !== 'SINGLE') {
                        e.stopEvent();
                        isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
                        if (isChecked) {
                            console.time();
                            me.deselectAll(true);
                            console.timeEnd();
                        } else {
                            console.time();
                            me.selectAll(true);
                            console.timeEnd();
                        }
                    }
                }
            },
            selType: 'checkboxmodel',
            buttons: [{
                text: 'Select All',
                handler: function (btn) {
                    var grid = btn.up('#demogrid');
                    console.time();
                    grid.getSelectionModel().selectAll(true);
                    console.timeEnd();
                }
            }, {
                text: 'Deselect All',
                handler: function (btn) {
                    var grid = btn.up('#demogrid');
                    console.time()
                    grid.getSelectionModel().deselectAll(true);
                    console.timeEnd();
                }
            }]
        });
    }
});

Upvotes: 1

Hesam Faridmehr
Hesam Faridmehr

Reputation: 1196

use suspendEvents function on model to stop all events and after you done you can start all events by resumeEvents

grid.getSelectionModel().suspendEvents();
grid.getSelectionModel().resumeEvents();

Upvotes: 1

Related Questions