在Extjs网格中选项从组合框中选择,它将从网格

时间:2017-04-20 11:26:34

标签: javascript extjs extjs4 extjs4.1 extjs-grid

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

  1. 从表格中选择所有行。
  2. 点击最后​​一列单元格,它会显示编辑单元格的组合框,同时取消选择所有其他记录这是一个问题。
  3. 现在从组合框中选择值并点击任何其他记录或某处,您会注意到已编辑的行也会被取消选择
  4. 我正在使用4.1。* Extjs,我试图覆盖celledit插件以及CheckboxModel。

    是否有任何方法可以保留所选记录,除非我没有在复选框列中专门取消选择。

    任何帮助将不胜感激,并提前致谢

    here is what I have done on the fiddle

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

1 个答案:

答案 0 :(得分:1)

嘿,我把你的小提琴分开并做了一些改变,我认为可以解决你的问题: https://fiddle.sencha.com/#view/editor&fiddle/27ua

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

以下是代码:

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
    }

});