【问题标题】:JqGrid fires 'aftersavefunc' & 'successfunc' before 'saveRow'JqG​​rid 在“saveRow”之前触发“aftersavefunc”和“successfunc”
【发布时间】:2018-03-15 14:16:01
【问题描述】:

我试图在保存一行后重新加载网格,以便能够获取行的 ID 以用于记录目的,但在保存之前,'aftersavefunc' 和 'successfunc' 会以某种方式触发 'reloadGrid('#telephoneGrid')'。似乎“aftersavefunc”和“successfunc”是相同的。现在我无法添加或编辑任何行。

    var lastSel;

    function onTelephoneSelect(id, status, e) {

        if ($(e.target).hasClass('edit')) {
            var editParameters = getEditParameters();
            if (id && id !== lastSel) {
                jQuery('#telephoneGrid').saveRow(lastSel);
            }
            jQuery("#telephoneGrid").jqGrid('editRow', id, editParameters);
            lastSel = id;
        }
    }

    function getEditParameters() {
        return {
            "keys": true,
            "oneditfunc": null,
            "successfunc": null,
            "url": '@Url.Action("SaveTelephoneEntry","TelephoneEntry")?customerId=' + $('#SelectCompany').val(),
            "extraparam": {},
            "aftersavefunc": reloadGrid('#telephoneGrid'),
            "errorfunc": null,
            "afterrestorefunc": null,
            "restoreAfterError": true,
            "mtype": "POST"
        }
    }

我现在很绝望,想不出任何可行的解决方案。

有人可以在这里为我提供帮助吗?或者已经遇到了同样的问题并找到了可行的解决方案?

提前非常感谢。

【问题讨论】:

  • 首先,请始终包含有关您使用的 jqGrid 的 版本fork 的信息(free jqGrid,商业@ 987654322@ 或版本 aftersavefunc 的用法是正确的,但我想你在实现reloadGrid 函数时可能会遇到问题。你在里面使用setTimeout吗?现在到底什么工作不正确?重新加载后是否看到旧数据?哪个datatype 有网格?你使用loadonce: true 选项吗?
  • 感谢您的回复,奥列格。我会记住发布我将来使用的版本和分叉。在名为 Jay 的海报下方有对我有用的正确答案。一切('aftersavefunc'、'successfunc')都可以正常工作。

标签: javascript jquery asp.net asp.net-mvc jqgrid


【解决方案1】:

'aftersavefunc' 和 'successfunc' 是回调,但您似乎正在尝试直接设置函数,因此它们会在您打算之前被调用。

使用正确的回调签名,它应该看起来像这样:

"aftersavefunc": function (rowid, response, options) {
    reloadGrid('#telephoneGrid');
},

【讨论】:

    【解决方案2】:

    不确定为什么您需要 EditParameters 的 getter(而不仅仅是定义对象并直接使用它),但是您是否检查过 editParameters 的值是否已设置正确的,就在开火之前:

     jQuery("#telephoneGrid").jqGrid('editRow', id, editParameters);
    

    你的 getter 在 .hasClass('edit') 里面,所以你可以在编辑 sub 之前尝试使用你的 getter,就在 function onTelephoneSelect(id, status, e) { 之后看看它是否有什么不同。 (只是因为我们不知道您在哪里/何时拨打onTelephoneSelect)。

    【讨论】:

    • 我需要两次 EditParameters。一次用于添加新条目(问题中未提及)和编辑。不幸的是,它没有任何区别。 onTelephoneSelect 在点击编辑图标时被调用,并且只有在成功保存后才能重新加载网格。
    • 你为什么假设保存发生在“之前”'aftersavefunc'被触发?在我看来,“jQuery('#telephoneGrid').saveRow(lastSel);”在 IF 块内,它会在该块内触发 aftersavefunc 保存后(应该如此?)然后你运行“jQuery(”# phoneGrid").jqGrid('editRow', id, editParameters); " 块外 - 保存后?在这种情况下,期望 reloadGrid 在您查询 ID 之前发生是合乎逻辑的?
    • 感谢您的帮助。我应该包装“aftersavefunc”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多