jqGrid - JSON响应中的内联编辑逻辑

时间:2011-11-10 21:14:21

标签: jquery jqgrid

是否可以在原始数据JSON响应中进行内联编辑?

因此,我们可以在JSON列中使用"editable:true"而不是"editable":"true",而且它的工作方式相同。

我想做什么 -

当我点击一行时,我可以内联编辑该行。并且“可编辑”属性根本没有在列模型中设置,而是通过JSON进行设置。这些列在加载时不应该是可编辑的,它只是会触发内联编辑的click事件。

我有以下 JSON

{
    "rows":[
        {
            "id":"1",
            "editable":"true",
            "cell":[                
                "Column 1 Data",
                "Column 2 Data"

            ]
        },
        {
            "id":"2",
            "editable":"false",
            "cell":[                
                "Column 1 Data",
                "Column 2 Data"

            ]
        }
]}

在这种情况下,不同的表单字段如何工作 - 输入字段,textarea和select字段?

1 个答案:

答案 0 :(得分:3)

这是一个有趣的问题!是的,你可以这样做。在loadComplete回调内部,您可以访问数据(转换为对象的JSON响应),这是loadComplete的参数。您可以发布有关行的信息,这些信息应在加载数据后直接在内联编辑模式下设置。例如,应该是rowid和可以编辑的列名。您可以使用setColProp方法(请参阅here)或getColProp(请参阅here)修改列的editable属性并致电editRow方法。通过这种方式,您可以完全实现所需的一切。

UPDATED :如果是内联编辑,您可以在任何行上设置“not-editable-row”类,然后jqGrid将不允许编辑该行。因此,在loadComplete(data)内,您可以枚举data.rows数组的项目,并且对于editable属性等于false的每个项目,将“not-editable-row”类添加到行。代码可以是以下内容:

$("#list").jqGrid({
    // ... here all your other jqGrid options
    loadComplete: function (data) {
        var item, i, l = data && data.rows ? data.rows.length : 0;
        for (i = 0; i < l; i++) {
            item = data.rows[i];
            if (item.editable === false) {
                $("#" + item.id).addClass("not-editable-row");
            }
        }
    }
});

更新2 :问题非常简单。您应该在上面的代码中修改if (item.editable === false) {if (item.editable === "false") {,或者将"editable":"false"从JSON数据更改为"editable": false,这对应于布尔数据的JSON序列化。

如何从the demo查看方法工作。

更新3 。在更新版本的jqGrid中实现了rowattr。现在使用rowattr会更有效。有关代码示例,请参阅the answer