1

那里!
我的 jqGrid 中有一列是空的。
但我检查了 chrome 控制台上的对象,这很好。

col模型定义

colModel:[
    {name:'id',index:'id', width:55,editable:false,editoptions:{readonly:true,size:10},hidden:true},
    {name:'firstName',index:'firstName', width:100,searchoptions: { sopt: ['eq', 'ne', 'cn']}},
    {name:'lastName',index:'lastName', width:100,editable:true, editrules:{required:true}, editoptions:{size:10}},
    {name:'books[0].nome',index:'books[0].nome', width:100,editable:true, editrules:{required:true}, editoptions:{size:10}},
    {"formatter":"myfunction", formatoptions:{baseLinkUrl:'/demo/{firstName}|view-icon'}}
]

JSON 响应

{
    "total": "10",
    "page": "1",
    "records": "3",
    "rows": [
        {
            "id": 1,
            "firstName": "John",
            "lastName": "Smith",
            "books": [{"nome": "HeadFirst"}]
        },
        {
            "id": 2,
            "firstName": "Jane",
            "lastName": "Adams",
            "books": [{"nome": "DalaiLama"}]
        },
        {
            "id": 35,
            "firstName": "Jeff",
            "lastName": "Mayer",
            "books": [{"nome": "Bobymarley"}]
        }
    ]
}

chrome 控制台检查对象

rowdata.books[0].nome
"HeadFirst"

有人知道哪里有可能的技巧吗?

谢!

4

2 回答 2

1

您应该仅将可用作 JavaScript 中的属性名称和 CSS id 名称的名称用作属性name值。colModel所以使用的name:'books[0].nome'不是一个好主意。

要解决您的问题,您可以使用jsonmap. 例如,您可以使用点名转换:

{name: 'nome', jsonmap: 'books.0.nome', ...

在更复杂的情况下,您可以使用函数作为 的值jsonmap。例如

{name: 'nome', jsonmap: function (item) {
        return item.books[0].nome;
    }, ...

jsonmap您可以在其他旧答案中找到更多关于使用的代码示例: hereherehereherehere

于 2012-05-24T05:15:30.210 回答
0

name旨在成为行的唯一名称,而不是对 JSON 对象的引用。从jqGrid colModel 选项文档

在网格中为列设置唯一名称。此属性是必需的。除了用作属性/事件名称的其他词外,保留字(不能用于名称)包括 subgrid、cb 和 rn。

您还可以观察.namegrid.base.js中的使用方式- 例如:

var nm = {},
...
nm = $t.p.colModel[i].name;
...
res[nm] = $.unformat.call($t,this,{rowId:ind.id, colModel:$t.p.colModel[i]},i);

无论如何,回到你的问题,我认为通过直接传递书名 - 作为字符串而不是对象 - 并通过名称将其引用为类似bookName.

于 2012-05-24T02:58:41.697 回答