2013-05-03 200 views
2

我对jqGrid相当陌生,需要从单元获取数据进行编辑,并且希望避免访问服务器。从jqGrid单元获取数据的最佳方式是什么?

由于自定义格式中增加额外的标签的数据,简单地使用getCell回报所有的标签为好,我的第一个实现了剥离,然后关闭“手动”

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(); 

这似乎是最好的方式(因为我有完全控制权它),但是有没有更好的方式来获取最初传递给格式化程序功能的数据,该功能在未来可能会升级到jqGrid时不会中断并且不需要添加额外的标记?

+0

当你需要从单元格获取数据和**在哪个上下文中**(在自定义格式化程序,回调函数,事件处理函数等内部)时,知道**是非常重要的。例如,如果该行在内嵌或单元格编辑模式下为*编辑*,则无法访问编辑单元格的数据(从“myData”列中)。知道如何填写数据很重要。哪个'datatype'有网格?你是否使用'loadonce:true'选项?如果您发布了一个用于创建jqGrid的代码示例,那将会很好。 – Oleg 2013-05-03 11:42:28

回答

1

关于你的问题的初始部分:

由于自定义格式中增加额外的标签的数据,简单地使用getCell返回所有的标签,以及...

的标准方式来获取数据而无需额外的标签就是实现一个unformat函数。从jqGrid文档:

正如在预定义格式化程序章节中所述,所有预定义的类型都与编辑模块兼容。这意味着数字,链接,电子邮件等被转换,以便它们可以正确编辑。此外,获取数据的方法(如getRowData和getCell)使用此格式以获取原始值。问题是:如果我们使用自定义格式化函数,并且想要使用编辑或方法getRowData和getCell获取原始值,该怎么办?

答案是:您可以使用自己的自定义unformatter函数来做到这一点。该功能可在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部的全部细节,其中包括参数说明。

相关问题