【问题标题】:Fire "afteredit" after edit the entire row in ExtJS grid?在 ExtJS 网格中编辑整行后触发“afteredit”?
【发布时间】:2011-04-13 11:11:21
【问题描述】:

我有一个 ExtJS 编辑器网格,里面有一些列。我想修改记录上的数据并将数据自动保存到数据库。但我只需要在完成编辑当前行的所有单元格后保存数据。我使用了事件“afteredit”,但它在一个单元格更改后立即触发了该事件。 在完成修改所有单元格之前,如何保持该事件不触发?或者您能否建议另一种方法来执行此操作,而不是使用“afteredit”事件? 非常感谢。

【问题讨论】:

    标签: events extjs editor grid


    【解决方案1】:

    你可以看看Ext.ux.grid.RowEditor。它有一个afteredit 事件,当行完成编辑时触发。

    您可以在 http://dev.sencha.com/deploy/dev/examples/grid/row-editor.html 找到工作示例

    【讨论】:

      【解决方案2】:

      这是我的问题:您是否连续编辑所有单元格?更好的解决方案是使用“保存”按钮将更新后的数据发送回服务器并将其保存到数据库中。

      现在,如果您坚持要修改一行中的所有单元格,您可以执行以下操作:

      afteredit 事件处理程序中:

      1. 获取正在编辑的记录(可以通过event.record获取)
      2. 检查记录中的所有字段是否都已修改。这可以通过检查公共属性modified 来完成。
      3. 如果所有字段都已修改,则继续将更新后的记录发送到服务器以保存到数据库中。

      【讨论】:

        【解决方案3】:

        edit 事件被触发时,您应该检查 modified 配置以检查是否所有网格列都已被修改。修改后,发送到后端即可。

        【讨论】:

          【解决方案4】:

          我认为在您的情况下,拥有一个单击以保存网格的按钮会更容易。您可以通过调用 grid.store.getModifiedRecords() 来访问所有修改过的记录并将其发送到您的后端服务并进行批量更新,而不是一次更新一行。

          【讨论】:

            【解决方案5】:

            您可以在选择模型上使用rowdeselect 事件(假设您使用Ext.grid.RowSelectionModel。在事件处理程序中,您可以检查记录是否已被修改并做出相应的反应。

            var grid = // your grid 
            grid.getSelectionModel().on("rowdeselect", function(selModel, rowIndex, record) {
                if (record.dirty) {
                    // record has been modified
                }
            });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-02-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-13
              相关资源
              最近更新 更多