【问题标题】:Update newly created record on client after successfully processing the Create request on server成功处理服务器上的创建请求后更新客户端上新创建的记录
【发布时间】:2017-06-26 08:47:10
【问题描述】:

请考虑以下情况:

  • IgniteUI 16.1 igGrid 支持 igGridUpdating 功能和 RESTDataSource
  • 用户通过模态对话框创建新记录
  • 使用表单数据发起发布请求
  • 服务器处理创建请求并返回一个填充了正确 ID 的对象
  • 在客户端的成功处理程序中,必须找到网格行中新添加的内容,并使用从服务器返回的正确 ID 进行更新。
  • ID 列用作网格的主键,它是隐藏的

添加新行时会发生什么?

我们正在关注 infragistics.lob-16.1.js

_dialogOpening() 中,第 68167 行,_originalValues 是通过 $.extend(this._originalValues, values, this._originalValues) 计算的,其中 values = _getDefaultValues() 或换句话说 values.id = this._pkVal。而_pkVal 是一个计数器,每次出现新行时都会递增。

请记住,稍后会调用_endEditDialog(),其中newValues,代表用户输入的数据,与输入表单的默认值合并:newValues = this._getNewValuesForRow(colElements),后跟newValues = $.extend({}, prevValues, newValues)和@987654331 @ 与上面的 _originalValues 相同。

然后调用_addRow(),它在运行时调用grid.dataSource.addRow()并创建一个事务。

我的意思是更新功能会自动为新行和ID = CurrentRowsCount + 1 生成 ID。

因此,如果网格包含 8 条记录,那么新创建的记录将自动分配 ID = 9。想象一下,如果现有记录之一的 ID = 9,那么 igGridUpdating 的 updateRow(rowId, values) 将更新现有的两行和新的。我真的很想调用这个方法来用从服务器返回的数据更新行。

如何介入全局,完成新行的更新?

【问题讨论】:

    标签: infragistics ignite-ui iggrid


    【解决方案1】:

    自动生成的主键仅用于涵盖最基本的场景。如果您的应用支持行删除,您应该使用 generatePrimaryKeyValue 事件更改它们以保持它们的唯一性。

    在从服务器接收到永久密钥后使用 updateRow 是可行的方法,但是,请记住从 allTransactions 数组中弹出事务,这样更新就不会在下一次 saveChanges 调用时发送到服务器。

    【讨论】:

    • 运行良好!太可惜了,这个事件是从 13.2 开始记录的,我错过了......谢谢!
    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多