Javascript extjs6。具有抑制事件的网格复选框模型

Javascript extjs6。具有抑制事件的网格复选框模型,javascript,extjs,Javascript,Extjs,我有一个包含数千条记录的网格。它几乎可以正常工作。当我以编程方式调用此方法时: selectionModel.selectAll(true); 它工作得很好。我的脚本没有冻结,因为这个true参数,根据文档,它会抑制任何选择事件。但是,当我通过标题复选框选择所有记录时(选中并取消选中所有记录),我的脚本将被冻结。我猜,这是因为默认情况下,选择事件不会被抑制。我试图找到一个配置,它全局抑制选择事件,但找不到它。所以,我的问题是如何解决这个问题?如何全局抑制网格中的选定事件selModel?使用模

我有一个包含数千条记录的网格。它几乎可以正常工作。当我以编程方式调用此方法时:

selectionModel.selectAll(true);
它工作得很好。我的脚本没有冻结,因为这个
true
参数,根据文档,它会抑制任何选择事件。但是,当我通过标题复选框选择所有记录时(选中并取消选中所有记录),我的脚本将被冻结。我猜,这是因为默认情况下,选择事件不会被抑制。我试图找到一个配置,它全局抑制选择事件,但找不到它。所以,我的问题是如何解决这个问题?如何全局抑制网格中的选定事件
selModel

使用模型上的函数停止所有事件,完成后,可以通过

使用模型上的函数停止所有事件,完成后,可以通过


您可以使用grid CheckboxModel的覆盖方法进行处理

在中,我使用相同的方法
onHeaderClick
创建了一个演示

代码片段

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();
                }
            }]
        });
    }
});
Ext.application({
名字:“小提琴”,
启动:函数(){
var store=Ext.create('Ext.data.store'{
字段:['number'],
数据:(()=>{
让数据=[];

对于(设i=1;i,可以使用grid CheckboxModel的覆盖方法进行处理

在中,我使用相同的方法
onHeaderClick
创建了一个演示

代码片段

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();
                }
            }]
        });
    }
});
Ext.application({
名字:“小提琴”,
启动:函数(){
var store=Ext.create('Ext.data.store'{
字段:['number'],
数据:(()=>{
让数据=[];

对于(设i=1;i在什么地方使用这些方法?如果您希望它一直被禁用,请在
grid的
boxready
事件中运行
grid.getSelectionModel().suspendEvents()
我应该在什么地方使用这些方法?如果您希望它一直被禁用,请运行
grid.getSelectionModel().suspendEvents()
on
boxready
电网事件