我对jqGrid很新,需要从单元格中获取数据进行编辑,并希望避免访问服务器。
由于自定义格式化程序正在为数据添加额外的标记,并且仅使用getCell
也会返回所有标记,我的第一个实现是剥离然后关闭'手动':< / p>
createColumn: function (val, options) {
return '<div style="white-space:pre-wrap">' // etc.
+ val
+ '</div>';
}
// ...
// Note: rowId is known at this point
var myData = $('#myGrid').jqGrid('getCell',rowId,'myData');
var myDataWrapper = mydata.createColumn('');
data = data.substr(myDataWrapper.length-6,data.length-myDataWrapper.length);
当然,如果有人添加更复杂的标签,这将会中断。所以我看了getCell
实际找到数据的方式。不幸的是,目前它只搜索名称,因此代码为:
var n = -1;
val colModel = $('#myGrid').jqGrid('getGridParam','colModel');
for (var i in colModel) {
if (colModel[i].name === 'myData') {
n = parseInt(i)+1;
}
var myData = $('#'+rowId+' td:nth-child('+n+') div').text();
在getCell
中复制代码似乎是错误的,但似乎没有任何其他方法可以从名称中找到列号(至少,我找不到它!)。这也假设数据包含在单个div
中,与第一个版本一样。
查看生成的html,我注意到jqGrid实际上使用aria-describedby
标记了单元格(我以前从未见过)。如果保证始终存在,则可以使用以下方法完成上述操作:
var myData = $('#'+rowId+' td:[aria-describedby=myGrid_myData] div').text();
但是这仍然假设数据包含在单个div
中,当然,未来版本的jqGrid可能会更改或删除此属性。
所以我接着尝试了简单的解决方案,通过将数据包装在span
中来添加id,以便我可以轻松找到它:
createColumn: function (val, options) {
return '<div style="white-space:pre-wrap">' // etc.
+ '<span id="' + options.gid + '_' + options.rowId + '_' + options.colModel.name + '">' + val + '</span>'
+ '</div>';
}
// ...
var myData = $('#myGrid_'+rowId+'_MyData').text();
这似乎是最好的方式(因为我可以完全控制它)但是有更好的方法来获取最初传递给formatter函数的数据,这些函数不会在将来可能升级到jqGrid时中断不需要添加额外的标签吗?
答案 0 :(得分:1)
关于问题的第一部分:
由于自定义格式化程序正在为数据添加额外的标记,因此只需使用getCell即可返回所有标记...
在没有额外标记的情况下获取数据的标准方法是实现unformat
函数。来自jqGrid文档:
如预定义格式化器章节中所述,所有预定义类型都与编辑模块兼容。这意味着转换数字,链接,电子邮件等,以便可以正确编辑它们。此外,获取数据的方法(如getRowData和getCell)使用此非格式化以获取原始值。问题是:如果我们使用自定义格式化程序函数并且如果我们使用编辑或方法getRowData和getCell想要获得原始值,该怎么办?
答案是:您可以使用自己的自定义非格式化功能来执行此操作。此函数可用于colModel
例如:
jQuery("#grid_id").jqGrid({
...
colModel: [
...
{name:'price', index:'price', width:60, align:"center", editable: true,
formatter:imageFormat,
unformat:imageUnFormat},
...
]
...
});
function imageFormat( cellvalue, options, rowObject ){
return '<img src="'+cellvalue+'" />';
}
function imageUnFormat( cellvalue, options, cell){
return $('img', cell).attr('src');
}
有关完整详细信息,请参阅jqGrid文档的Unformatting部分,包括参数说明。