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

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

因此,在模型列中没有"editable:true" ,我们可以在JSON中使用"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和选择字段?

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

更新 :如果是内联编辑,您可以在任何行上设置“not-editable-row”类,然后jqGrid将不允许编辑该行。 因此,在loadComplete(data)您可以枚举data.rows数组的项目,并且对于每个具有等于false editable属性的项目,将“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) { to if (item.editable === "false") {或将"editable":"false"从JSON数据更改为"editable": false ,对应布尔数据的JSON序列化。

如何从演示中看到该方法的工作原理。

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