具有 "local" 数据类型的 jqgrid 在触发 reloadGrid 时不显示更新的数据

jqgrid with "local" datatype not displaying updated data when reloadGrid is triggered

我有一个使用 jqgrid 且数据类型设置为 "local" 的网络应用程序。它是这样实例化的:

var LocalDataSource = getLocalDataSource();
$("#grid").jqGrid(
    {
        data: LocalDataSource.Rows,
        datatype: "local",
        gridComplete: onGridLoaded,
        (etc)
    }
);

其中 getLocalDataSource() returns 包含对象数组的对象,如下所示:

{
    metadatax: "foo",
    metadatay: "bar",
    Rows: [
        {
            strValue: "baz1"
        },
        {
            strValue: "baz2"
        }
    ]
}

当 table 首次加载时,一切都按预期工作。但是,然后我调用以下函数:

function mutateLocalDataSource(){
    LocalDataSource.Rows[0].strValue = "qux";
    $('#grid').trigger("reloadGrid");
}

此时,我知道jqgrid正在刷新(因为onGridLoaded正在被调用),但是网格中显示的数据永远不会用"qux"更新。当我触发 reloadGrid 时,为什么网格不从 LocalDataSource 重新加载它的数据?

我在查找有关 jqgrid 的文档时遇到了问题,但看起来当您的数据类型设置为本地时,reloadGrid 触发器不会重新引用数据,除非您首先触发其他几个方法。具体来说,以下代码对我有用:

我换了

$('#grid').trigger("reloadGrid");

$('#grid')
.jqGrid('clearGridData')
.jqGrid('setGridParam',
    {
        data: LocalDataSource.Rows
    })
.trigger("reloadGrid");

如果有人知道为什么这只能以这种方式工作,而不是我最初假设的方式,请告诉我。