从Grid CellEditing字段访问记录

时间:2014-06-25 11:32:33

标签: gridview extjs

我使用带有CellEditingPlugin的Grid和两个DateColumns(startdate和enddate)。两列都分配了一个名为startdateEditfield和enddateEditfield的日期字段。

如果两个日期相同且更改了startdate,我也想更改enddate。

所以我做了

var start = Ext.getCmp("startdateEditfield")
start.on('change',function(field,newValue,oldValue) {
    var end = Ext.getCmp("enddateEditfield")
    if(end.getValue()==oldValue) end.setValue(newValue);
});

这不起作用,因为enddateEditfield不存在,因为我正在编辑startdate,而不是enddate。但是如何访问我正在编辑的记录?

2 个答案:

答案 0 :(得分:0)

在某些事件处理程序上,您可以使用以下命令访问记录:

var selectedModel = this.up('grid').getSelectionModel().getSelection()[0];
selectedModel.set('dataIndexOfNextCol', "Success");

查看我对此问题的回答,它可能会对您有所帮助:ExtJs. Set rowediting cell value

答案 1 :(得分:0)

好吧,您可以尝试使用beforedit并编辑监听器......

这就是我设法做到的方式

Ext.define('Foo.view.BarView', {
    extend: 'Ext.grid.Panel',

    alias: 'widget.foobarview',

    initComponent: function() {
        var me = this;

        // this is our last selected record        
        this.lastRecord = null;

        this.plugins =  [{
            ptype: 'cellediting',
            clicksToEdit: 1
        }];

        this.listeners = {
            beforeedit: function(editor, obj){
                this.lastRecord = obj.record;
            }
        };

        this.columns = [
            {
                dataIndex: 'foo',
                text: 'bar',
                editor: {
                    xtype: 'datefield',
                    listeners: {
                        change: function(datefield, newValue, oldValue, eOpt){
                        me.fireEvent('myEvent', datefield, me);
                    }
                }
            }
        }
    ]
};

现在在您的控制器中,您可以在从网格更改datefield中的值时获取最后选择的记录...

Ext.define('Foo.controller.BarController', {
    extend: 'Ext.app.Controller',


    stores: ['your stores'],

    views: [
        'your views'
    ],

    init: function() {
        var me = this;
        'foobarview': {
            myEvent: this.onFireMyEvent
        }
    },

    onFireMyEvent: function(field, grid){
        record = grid.lastRecord;
    }
});