是否可以在原始数据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字段?
答案 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。