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.. 你有没有试过听 cellEditingedit
事件?请查看我的更新答案。
不幸的是,这也不起作用。它看起来像是设计的。
您有解决方案吗?因为我们面临着几乎类似的问题。【参考方案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() 不包括最后编辑的记录的主要内容,如果未能解决你的问题,请参考以下文章