【问题标题】:Access Record from Grid CellEditing Field从网格单元编辑字段访问记录
【发布时间】:2014-06-25 11:32:33
【问题描述】:

我使用带有 CellEditingPlugin 和两个 DateColumn(开始日期和结束日期)的网格。这两列都分配了一个日期字段,名为 startdateEditfield 和 enddateEditfield。

如果两个日期相同并且更改了开始日期,我也想更改结束日期。

所以我做了

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。但是如何访问我正在编辑的记录?

【问题讨论】:

  • 检查edit 事件的CellEditing 插件。

标签: gridview extjs


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    好吧,你可以试试 beforedit 和 edit listeners...

    这就是我成功的方法

    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);
                        }
                    }
                }
            }
        ]
    };
    

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

    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;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多