jqGrid:subgrid不会填充数据

时间:2011-06-23 20:00:39

标签: jqgrid subgrid

我有一个子网格,当你点击“Cheese”旁边的“+”符号时,ajax查询会触发,我会看到子网格列名,但是实际数据没有填充到子网格中。无论我尝试扩展哪个网格,问题都会发生,但“Cheese”示例如下所示。

您可以在屏幕截图中看到FireBug输出底部的XML响应。我已经阅读了XML,它看起来是有效的。在预感中,我还将XML输出粘贴到this page中,它似乎缩进得很好。最重要的是,我还有ajax调用返回一些非常基本的值,无论我到目前为止尝试过什么,网格仍然是空的。

enter image description here

您应该在子网格中看到的是:

------------------------------------------------------
|Translations                    | Language | Active |
------------------------------------------------------
| It's cheesy goodness           |   EN     |   No   |
| fromage                        |   FR     |   No   | 
|                                |   DE     |   N/A  |   <-- "N/A" means there's no translation of "cheese" in German, currently in the database

    ... etc., with all supported languages listed.

子网格的代码是:

$("#translationsList").jqGrid({
    caption : "Translations",
    datatype : "xml",
    url : translationsFeed,
    editurl : translationsEdit,
    mtype : "get",
    pager : "#translationsPager",
    rowNum : 20,
    autowidth : true,
    sortname : "phrase",
    sortorder : "asc",
    viewrecords : true,
    multiselect : false,
    hidegrid : false,
    height : 300,
    altRows : true,
    rownumbers : true,
    toolbar : [false],
    colNames : ["phrase_id", "translation_id", "language_cd", "Phrase", "Translation", "Created", "Modified", "Active"],
    colModel : [
            { name : "phrase_id",                                   index : "phrase_id",            sortable : true,    search : false, editable : true,    edittype : "text",      editrules: { edithidden :true },                                    hidden : true},
            { name : "translation_id",                          index : "translation_id", sortable : false, search : false, editable : true,    edittype : "text",      editrules: { edithidden :true },                                    hidden : true},
            { name : "language_cd",                                 index : "language_cd",      sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { edithidden: true, required : true }, hidden : true },
        { name : "Phrase",              width:200,  index : "phrase",               sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { required : true } },
        { name : "Translation",         width:200,  index : "translation",      sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { required : false } },
        { name : "Created",             width:100,  index : "modify_dt",            sortable : true,    search : true },
        { name : "Modified",            width:100,  index : "create_dt",            sortable : true,    search : true },
        { name : "Active",              width:20,       index : "active",               sortable : true,    search : true,  editable : true,    edittype : "select",    editoptions:{value:"0:No;1:Yes"} }
    ],
    onSelectRow: function(id) {
            jQuery('#translationsList').editRow(id, true);
    },
    subGrid: true,
    subGridUrl: 'ajax/translations_subgrid_feed.php',
    subgridtype: 'xml',
    subGridModel : [{
      name      : ['Translations', 'Language', 'Active'],
      width     : [583, 70, 80],
      align     : ['left','right','right'],
      params    : ['phrase_id']
    }],
  subGridOptions: {
    plusicon : "ui-icon-plus",
    minusicon : "ui-icon-minus",
    openicon: "ui-icon-carat-1-sw",
    expandOnLoad: true,
    selectOnExpand : false,
    reloadOnExpand : true
  }
});

主要/子网格的XML响应可以在this Gist

中找到

1 个答案:

答案 0 :(得分:1)

我可以重现问题并分析jqGrid的子网格模块的代码。我的解释是:您使用的subGridOptions的新expandOnLoad: true属性只有在主网格上的“本地”数据类型时才能工作。我没有在文档中找到相应的相关注释,但事实确实如此。

在版本4.1中使用delayOnLoad选项,但它无法正常工作。在版本4.1.1中,the fix之后未使用该选项,并且在主网格中添加行之后立即使用该选项。问题是jqGrid使用.grid.hDiv.loading属性来跳过ajax请求,如果先前的ajax请求的响应没有被处理到结束。主网格beforeSend请求的$.ajax处理程序内部(请参阅here)将被称为beginReq(),第一行是

ts.grid.hDiv.loading = true;

然后在$.ajax请求的success处理程序内部将调用addXmlData方法,该方法为主网格的每一行调用addSubGrid,调用{{ 3}}在网格行的“展开”图标上。因此,.grid.hDiv.loading将在所有网格行上被称为,然后false将在successts.grid.hDiv.loading结束$.ajax处理程序。因此,在.trigger('click');方法的相应部分中,expandOnLoad: true将进行测试,相应的{{1}}调用将被跳过行将不会扩展

所以我可以重复我的分析的简短结果:不要使用{{1}}选项。它不适用于远程数据。