代码之家  ›  专栏  ›  技术社区  ›  Jacobian

ExtJS 6。具有抑制事件的网格复选框模型

  •  0
  • Jacobian  · 技术社区  · 6 年前

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

    selectionModel.selectAll(true);
    

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Narendra Jadhav    6 年前

    您可以使用重写 onHeaderClick 网格CheckboxModel方法。

    在里面 this Fiddle ,我用同样的方法创建了一个演示 头舔 .

    代码片段

    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();
                    }
                }]
            });
        }
    });
    
        2
  •  1
  •   Hesam Faridmehr    6 年前

    使用 suspendEvents 在模型上运行函数以停止所有事件,完成后,您可以通过 resumeEvents

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