我一直试图让“Grid as Subgrid”功能正常运行并且运气不佳。我认为我在代码中做错了,因为它在独立测试中运行良好。但是,我终于注意到我的应用程序和我的测试页面之间的唯一区别是我的应用程序在IE7上运行而我在Firefox中运行我的测试页面。果然,当我在IE7中加载测试页面时,我遇到了同样的问题。
将在IE7上重现问题的代码如下:
$(function () {
function loadTasks(subgrid_id, row_id)
{
var id = subgrid_id + '_t';
$('#' + subgrid_id).html('<table id="' + id + '"></table>');
jQuery("#" + id).jqGrid({
datatype: 'local',
colNames: ['No','Item','Qty','Unit'],
colModel: [
{name:'num',index:'num',width:80,key:true},
{name:'item',index:'item',width:130},
{name:'qty',index:'qty',width:70,align:'right'},
{name:'unit',index:'unit',width:70,align:'right'}
],
height: '100%'
});
}
var x = $("#grid").jqGrid({
jsonReader: { root: "rows", repeatitems: false },
datatype: "json",
height: 'auto',
autowidth: true,
forceFit: true,
colNames:['ID','Name'],
colModel:[
{name:'id', key:true, index:'id', width:60, sorttype:"int", jsonmap:"id"},
{name:'name', index:'foobar', width:90, jsonmap: "name"}
],
subGrid: true,
subGridRowExpanded: loadTasks,
caption: "Results"
});
var jsonData = [
{id: 1, name: 'Apple'},
{id: 2, name: 'Banana'},
{id: 3, name: 'Pear'},
{id: 4, name: 'Orange'}
];
x[0].addJSONData( { rows: jsonData } );
});
似乎在每一行上创建了一些虚假元素,这些元素无法在行内正确呈现。这是一个关于IE7呈现方式的屏幕截图:
奇怪的是那些“未定义”行实际上是有效网格行的一部分,如果我将鼠标悬停在“Apple”上,则第一个 undefined 行也会突出显示。
我选择jqGrid而不是其他网格的主要原因是它支持嵌套多个网格(我们真的需要我们的应用程序),但我们的企业标准仍然是IE7,所以我们需要支持这个浏览器。我能做些什么来使这个功能在IE7下正常工作吗?
答案 0 :(得分:3)
我报告了错误here。问题是the line中的输入错误,其中使用了+=
而不是=
。结果undefined
被添加到具有子网格的每一行。
这是不典型的,但Tony在我的错误报告后修改了jqGrid的代码,在the download page下以相同的版本号4.3.2 发布了它。所以有两个不同的版本的jqGrid(带有bug而没有它),版本号相同。
所以要解决这个问题,你应该刷新你使用的jqGrid 4.3.2。
更新:我下载了“新jqGrid 4.3.2”的来源,我感到非常惊讶,因为它不仅包含当前的错误修复,还包含了jqGrid最后进行的许多其他更改时间。顺便说一句,我提出了许多改变。例如,可以在搜索对话框中使用现在的自定义控件(请参阅我最近的回答here),可以在SearchingDialog中使用searchOnEnter
和closeOnEscape
,新的afterChange
回调是那里。英语和德语的语言区域为fixed。例如,现在它将在thousandsSeparator
中以逗号grid.locale-en.js
使用。这很奇怪,但grid.locale-en.js
和grid.locale-de.js
的新版本只放在src\i18n
子目录中。子目录js\i18n
包含旧版本的文件(???)。我可以继续......
无论如何,我建议大家刷新以前从the download page下载的jqGrid 4.3.2的来源。