24 мая 2012 г., 07:36 отOleguser1404404

jqGrid JSON обозначение объектов

там!
У меня есть один столбец в моей jqGrid, который пуст.
Но я проверил объект на консоли Chrome, и это нормально.

colModel definition

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 response

{
    "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 console inspect object

rowdata.books[0].nome
"HeadFirst"

Кто-нибудь знает, где возможен трюк?

Tks!

Ответы на вопрос(2)

24 мая 2012 г., 11:15 отCommunity

name свойствоcolModel только имена, которые можно использовать в качестве имени свойства в JavaScript и как имена идентификаторов CSS. Так что использованиеname:'books[0].nome' не очень хорошая идея.

Для решения вашей проблемы вы можете использоватьjsonmap. Например, вы можете использовать точечное преобразование имени:

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

В более сложных случаях вы можете использовать функции в качестве значенияjsonmap. Наприме

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

Вы можете найти еще несколько примеров кода об использованииjsonmap в других старых ответах:Во, Во, Во, Во, Во.

24 мая 2012 г., 08:58 отJustin Ethier

name предназначен для того, чтобы быть уникальным именем строки, а не ссылкой на объект JSON. ОтjqGrid colModel Опции документации:

Укажите уникальное имя в сетке для столбца. Это свойство обязательно. Как и другие слова, используемые в качестве имен свойств / событий, зарезервированные слова (которые нельзя использовать для имен) включают в себя подсетку, cb и rn.

Вы также можете наблюдать, как.name используется внутри Grid.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.

ВАШ ОТВЕТ НА ВОПРОС