如果我将本地数据(一行)添加到现有的jqgrid,$.jgrid.randId()
的自动生成值似乎是错误的。我需要新的行ID来进行进一步的操作。
var mydata = [
{id: '12', thingy: "abc"},
{id: '34', thingy:"def"},
{id: '56', thingy: 'ghi'}
];
$("#grid").jqGrid({
data: mydata ,
datatype: 'local',
gridview: true,
height: 'auto',
autoencode: true,
rowNum: 3,
colModel: [{
name: 'id',
width: 60,
},{
name: 'thingy',
width: 90,
}],
caption: "Stack Overflow Example",
ondblClickRow: function(rowid) {
console.log(rowid); // print current row id
}
});
$('#UpdateGridButton').click(function(){
var p = $('#grid').getGridParam();
console.log("found gridParamData:", p.data);
if (p.data){
var newData = [
{id: '78', thingy: "jkl"}
];
var rowId = $.jgrid.randId(); // new row ID
$("#grid").jqGrid('addRowData', rowId, newData);
console.log(rowId); // print new row id
}
});
看到这个小提琴&控制台输出(2x单击该行):http://jsfiddle.net/quK3s/
你看,如果你添加一个新行,行id是“jqg1”,但实际上它插入一行“jqg2”(用firebug检查,如果双击该行,请参阅控制台输出)
任何想法如何解决这个问题?还是一个bug?
正如我在这个问题https://stackoverflow.com/a/9218310/2221820中看到的那样,我认为该函数是错误的,它应该是预先递增而不是$.jgrid.guid++
。
有什么想法吗?
更新
我最终使用了
var rowId = $.jgrid.uidPref + (++$.jgrid.guid);
但是,任何更好的解决方案/想法都将受到赞赏。
答案 0 :(得分:1)
阅读完源代码并检查文档后,这不是错误。
您必须添加一行作为对象,然后您可以指定rowId。如果您将数据添加为对象数组,则“rowid应包含数据对象中的名称,该名称应作为行的id”http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods(addRowData)
更新了小提琴&它工作正常:http://jsfiddle.net/quK3s/6/
...
var newData = {id: '78', thingy: "jkl"};
...