在 Extjs 网格中,在组合框中的选项 select 中,它从网格中删除所有记录的 selection

In Extjs grid On options select from combo box, it removes selection of all records from grid

在选项的组合 select 中,它会从网格中删除 selection 所有记录,甚至在您完成编辑时也会删除 selection 当前记录。

  1. Select 来自 table 的所有行。
  2. 单击最后一列单元格,它会显示用于编辑单元格的组合框,同时所有 其他记录都会被删除selected 这是一个问题。
  3. 现在 select 组合框中的值并单击任何其他记录或某处,您会注意到 编辑的行也被删除 selected

我使用的是 4.1.* Extjs,我也尝试覆盖 celledit 插件以及 CheckboxModel。

有什么方法可以保留记录 selected 直到并且除非我没有特别从复选框列中删除select它。

如有任何帮助,我们将不胜感激,并提前致谢

here is what I have done on the fiddle

https://fiddle.sencha.com/#view/editor&fiddle/1u9i

嘿伙计,我分叉了你的 fiddle 并做了一些我认为可以解决你的问题的更改: https://fiddle.sencha.com/#view/editor&fiddle/27ua

基本上,我使用 cellclick 事件侦听器向网格添加了 viewConfigcellclick 事件首先触发;在事件处理程序中,我们检查 cellIndex 参数的值以确定单击哪个网格列来触发事件。然后我们将标志变量的值设置为 cellIndex 值,这样我们就可以在选择模型的 beforedeselect 事件处理程序中访问该值。最后我们 return 假 beforedeselect 如果标志的值不是 0.

代码如下:

var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'email', 'region'],
    data: [{
        name: 'xyz',
        email: 'xyz@xyz.com',
        region: 'Arizona'
    }, {
        name: 'xyz',
        email: 'xyz@xyz.com',
        region: 'Alaska'
    }, {
        name: 'xyz',
        email: 'xyz@xyz.com',
        region: 'Alaska'
    }, {
        name: 'xyz',
        email: 'xyz@xyz.com',
        region: 'Alabama'
    }]
});
var states = Ext.create('Ext.data.Store', {
    fields: ['abbr', 'name'],
    data: [{
        "abbr": "AL",
        "name": "Alabama"
    }, {
        "abbr": "AK",
        "name": "Alaska"
    }, {
        "abbr": "AZ",
        "name": "Arizona"
    }]
});

var targetedCell = -1;
Ext.create('Ext.grid.Panel', {
    id: 'theGrid',
    viewConfig: {
        listeners: {
            cellclick: function(view, cell, cellIdx, record, row, rowIdx, eOpts) {
                targetedCell = cellIdx;
            }
        }
    },
    title: 'data',
    store: store,
    width: 400,
    renderTo: Ext.getBody(),
    selModel: new Ext.selection.CheckboxModel({
        checkOnly: true,
        listeners: {
            beforedeselect: function (thisSelModel, record, idx, eOpts) {
                if(targetedCell != 0) {
                    return false;
                }

                return true;
            }
        }
    }),
    columns: [{
        text: 'Name',
        dataIndex: 'name',

    }, {
        text: 'Email',
        dataIndex: 'email',
        flex: 1,

    }, {
        text: 'State',
        dataIndex: 'region',
        editor: {
            xtype: 'combo',
            store: states,
            displayField: 'name',
            valueField: 'name',
            listeners: {}
        }
    }],
    plugins: {
        ptype: 'cellediting',
        clicksToEdit: 1
    }

});