为什么editurl有404错误:'clientData'从jqGrid删除第二行时?

时间:2011-08-01 13:25:46

标签: jquery jqgrid

请参阅位于此处的用户@Oleg对jqGrid本地编辑演示的略微修改版本:http://www.dataactive.net/local_editing.htm ...使用下方工具栏中的垃圾箱图标或顶部工具栏上的“删除”按钮删除一行后,Firebug中会出现以下错误: “NetworkError:404 Not Found - http://www.dataactive.net/clientArray

@Oleg你能确定为什么会这样吗?

既然已经通过行删除解决了这个问题,我观察到的其他事情(请记住这是编辑“本地数据”),当新添加的行被删除时,它们似乎不会消失。考虑你的demo(@Oleg)中的myDelOptions代码,我试图在另一个脚本中用于生产目的:

myDelOptions = {
    // because I use "local" data I don't want to send the changes
    // to the server so I use "processing:true" setting and delete
    // the row manually in onclickSubmit
    onclickSubmit: function (options, rowid) {
        var grid_id = $.jgrid.jqID(grid[0].id),
            grid_p = grid[0].p,
            newPage = grid_p.page;

        // reset the value of processing option to true to
        // skip the ajax request to 'clientArray'.
        options.processing = true;

        // delete the row
        grid.delRowData(rowid);
        $.jgrid.hideModal("#delmod" + grid_id,
                          { gb: "#gbox_" + grid_id,
                              jqm: options.jqModal, onClose: options.onClose
                          });

        $("#list")[0].refreshIndex();

        setTimeout(function () {
            $("#list").trigger("reloadGrid", [{ current: true}]);
        }, 100);

        calculateTotal();

        if (grid_p.lastpage > 1) {// on the multipage grid reload the grid
            if (grid_p.reccount === 0 && newPage === grid_p.lastpage) {
                // if after deliting there are no rows on the current page
                // which is the last page of the grid
                newPage--; // go to the previous page
            }
            // reload grid to make the row from the next page visable.
            grid.trigger("reloadGrid", [{ page: newPage}]);
        }

        return true;
    },
    processing: true
};

遍历行对象的calculateTotal()函数,只需获取剩余行的列的数值,并将它们重新总计为摘要页脚行,但正在发生的是迭代行网格的对象显示“已删除的”行仍然存在,在数组或其他内容中,因此无法计算新的总数,因为似乎没有任何更改,实际上没有删除行。我不明白在本地数据的上下文中使用“delRowData”时实际发生了什么,但它似乎只是从可视网格中“删除”了行,但它仍然是行对象的一部分。而且,更奇怪的是,如果添加了另一个新行,则“已删除”行将重新显示为与新行完全相同的行。正如您所看到的,我有refreshIndex[0]trigger(reload),但如果trigger("reload")存在且refreshIndex[0]无效,则该行不会被删除。任何人都可以解决这个问题吗?需要额外的代码吗?

1 个答案:

答案 0 :(得分:2)

你是对的。谢谢!该示例的技巧是将processing: true设置为myDelOptions的一部分。在第一次删除操作时,一切正常,但在第二次调用processing: false方法的另一部分时,该值将重置为delGridRow

解决问题非常简单:只需添加额外的行

即可
options.processing = true;

onclickSubmit的{​​{1}}内。请参阅修改后的演示here