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

Posted

技术标签:

【中文标题】extjs getChangedData() 不包括最后编辑的记录【英文标题】:extjs getChangedData() doesn't include last edited record 【发布时间】:2013-11-21 19:22:06 【问题描述】:

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

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

除非出现以下情况,否则一切正常:

如果我在编辑一行时按下保存按钮,getChangedData 不会认为该行是脏的。

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

寻求帮助。

干杯,

阿维纳什

【问题讨论】:

【参考方案1】:

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

//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();
    

【讨论】:

感谢您的帮助,我试过了,但没有成功,我想进一步解释一下。场景是,我在列编辑器中,而不是在编辑器外部单击以将记录标记为脏,而是直接单击保存按钮。现在,当我在服务器端检查时,我没有得到在跳转到保存按钮之前正在编辑的记录。 hmm.. 你有没有试过听 cellEditing edit 事件?请查看我的更新答案。 不幸的是,这也不起作用。它看起来像是设计的。 您有解决方案吗?因为我们面临着几乎类似的问题。【参考方案2】:

当我尝试在 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 中,该属性为空。

【讨论】:

以上是关于extjs getChangedData() 不包括最后编辑的记录的主要内容,如果未能解决你的问题,请参考以下文章

GeoJSON 数据不包含有意义的数据 GeoDjango

开源图书 —— 《Node.js 包教不包会》

nodejs之包教不包会

QString类的使用(无所不包,极其方便)

webpack包教不包会性能优化最佳实践

hibernate插入一张表中数据时报错,更新和删除不包错但数据库中的数据没有改变,其他表的操作都没有错。