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
会更有效。 请参阅代码示例的答案 。