extjs getChangedData()不包括最后编辑的记录

时间:2013-11-21 19:22:06

标签: extjs gridpanel

我有一个网格,其中有cellediting插件,我通过直接事件发布数据。

我在网格下方有一个保存按钮,用于发送直接事件。

一切正常,除非以下情况:

如果我在编辑行时按下保存按钮,则getChangedData不会将该行视为脏。

如果我在之间(在之前的事件中)发出警报,它会按预期工作,但这不是一个选项。我尝试了所有可能的黑客攻击,例如发送活动元素的onblur事件,显示waitmsg,以编程方式将焦点设置在其他地方,但没有任何帮助。

寻求帮助。

干杯,

阿维纳什

2 个答案:

答案 0 :(得分:0)

尝试在保存按钮处理程序上添加此脚本。

//get the current selected row of your grid
var selectedRecord = gridpanel.getSelectionModel().getSelection()[0];
var selectedRow = gridpanel.store.indexOf(selectedRecord);

//get the index of selected row
var idx = selectedRow <= -1 ? (gridpanel.store.getCount() - 1) : selectedRow;


gridpanel.plugins[0].startEditByPosition({
                          row: idx, 
                          column: columnNumberWithEditor}); 

//proceeed to saving data

startEditByPosition将触发edit事件。

还要确保在cellEditing插件上处理edit事件。

listeners : {
    'edit' : function(editor, e) {
        e.record.commit();
    }
}

答案 1 :(得分:0)

当我尝试在IE7中编辑网格时出现同样的问题(Chrome不是问题)。

我认为问题是我的保存按钮事件处理程序被调用之前,onBlur事件可以告诉编辑单元完成其编辑并将其值存储在商店中。

我为解决这个问题所做的是:

(1)单独定义我的面板网格编辑器。

  var myPanelGridEditor = Ext.create('Ext.grid.plugin.CellEditing', {
    ptype: 'cellediting',
    clicksToEdit: 1
  });

(2)定义我的面板网格,其中包含插件中的面板网格编辑器。

  var myGrid = Ext.create('Ext.grid.Panel', {
    id: 'myPanelGrid', store: myStore, viewConfig: {markDirty: false},
    columnLines: true,
    columns: [
      {header: 'HE01', dataIndex: 'vp01', sortable: false, maxWidth: 40, field: {xtype: 'numberfield', minValue: 0, hideTrigger: true, decimalPrecision: 4  }},
      {header: 'HE02', dataIndex: 'vp02', sortable: false, maxWidth: 40, field: {xtype: 'numberfield', minValue: 0, hideTrigger: true, decimalPrecision: 4  }}
    ],
    selModel: Ext.create('Ext.selection.RowModel', {mode: 'SINGLE'}),
    plugins: [myPanelGridEditor],
    height: 73, width: 1010, margin: '0 0 12 30'
  });

(3)在我的保存按钮事件处理程序

中添加对completeEdit()的调用
{
  text: 'Save',
  formBind: true,
  id: 'saveButton',
  handler: function () {
    myPanelGridEditor.completeEdit();          
    ...
  }
}

理论上你应该可以打电话

myGridPanel.editingPlugin.completeEdit();

在你的保存处理程序中,但在Ext JS 3.3.1中,属性为null。