【发布时间】:2011-04-13 11:11:21
【问题描述】:
我有一个 ExtJS 编辑器网格,里面有一些列。我想修改记录上的数据并将数据自动保存到数据库。但我只需要在完成编辑当前行的所有单元格后保存数据。我使用了事件“afteredit”,但它在一个单元格更改后立即触发了该事件。 在完成修改所有单元格之前,如何保持该事件不触发?或者您能否建议另一种方法来执行此操作,而不是使用“afteredit”事件? 非常感谢。
【问题讨论】:
我有一个 ExtJS 编辑器网格,里面有一些列。我想修改记录上的数据并将数据自动保存到数据库。但我只需要在完成编辑当前行的所有单元格后保存数据。我使用了事件“afteredit”,但它在一个单元格更改后立即触发了该事件。 在完成修改所有单元格之前,如何保持该事件不触发?或者您能否建议另一种方法来执行此操作,而不是使用“afteredit”事件? 非常感谢。
【问题讨论】:
你可以看看Ext.ux.grid.RowEditor。它有一个afteredit 事件,当行完成编辑时触发。
您可以在 http://dev.sencha.com/deploy/dev/examples/grid/row-editor.html 找到工作示例
【讨论】:
这是我的问题:您是否连续编辑所有单元格?更好的解决方案是使用“保存”按钮将更新后的数据发送回服务器并将其保存到数据库中。
现在,如果您坚持要修改一行中的所有单元格,您可以执行以下操作:
在afteredit 事件处理程序中:
event.record获取)modified 来完成。【讨论】:
当 edit 事件被触发时,您应该检查 modified 配置以检查是否所有网格列都已被修改。修改后,发送到后端即可。
【讨论】:
我认为在您的情况下,拥有一个单击以保存网格的按钮会更容易。您可以通过调用 grid.store.getModifiedRecords() 来访问所有修改过的记录并将其发送到您的后端服务并进行批量更新,而不是一次更新一行。
【讨论】:
您可以在选择模型上使用rowdeselect 事件(假设您使用Ext.grid.RowSelectionModel。在事件处理程序中,您可以检查记录是否已被修改并做出相应的反应。
var grid = // your grid
grid.getSelectionModel().on("rowdeselect", function(selModel, rowIndex, record) {
if (record.dirty) {
// record has been modified
}
});
【讨论】: