Модуль динамического форматирования JqGrid colModel

Мои jqGrid работают динамически, поэтому все параметры тоже загружаются динамически. Эти параметры создаются с помощью java. Map<String,Object> Все параметры работают очень хорошо, но имя функции в map/opts не работает. Это json карта, созданная с помощью java.

"colModel":[...{"formatter":"myFunction","index":"","name":""}]

Я еще не отлаживал jqgrid.src.js и думаю, что проблема в eval. "myFunction" не вызывается, а возвращается неопределенное значение.


person user1404404    schedule 22.05.2012    source источник
comment
Ваш вопрос немного сложен для понимания, но если у вас возникли проблемы с форматировщиком, вы можете просто определить его как "formatter":myFunction, а затем myFunction будет вызываться, когда сетке необходимо отформатировать этот столбец. Но вы упомянули _3 _... здесь что-то еще происходит?   -  person Justin Ethier    schedule 23.05.2012
comment
Опции находятся в HashMap ‹String, Object›. Карта ‹Строка, Объект› opts = new HashMap ‹Строка, Объект› (); opts.put (форматировщик, myFunction); opts.put (индекс,); opts.put (имя,); Затем модуль форматирования opts для colModel ouptup: {formatter: myFunction, index:, name:}   -  person user1404404    schedule 23.05.2012
comment
это функция в файле js. function myFunction (cellvalue, options, rowObject) {return ‹a href='/myapps/crud/editSomething?id=+ options.rowId +'› Нажмите здесь ‹/a›; } Я не понимаю, почему jqGrid не вызывает myFunction? Когда я получаю настройки, показанные выше, и помещаю реальный файл, он работает; Здесь работает colModel: [... {formatter: myFunction, index:, name:} // работа], Здесь не работает colModel: [... {formatter: myFunction, index:, name:} // обратите внимание: myFunction со строкой в ​​реальном файле тоже не работает. ],   -  person user1404404    schedule 23.05.2012
comment
Что ж, все параметры в jqGrid работают нормально.   -  person user1404404    schedule 23.05.2012


Ответы (1)


Параметр formatter может быть строкой, если это один из предопределенных средств форматирования, но в соответствии с jqGrid docs for custom formatters:

Вы можете определить собственное средство форматирования для определенного столбца. Обычно это функция.

Итак, jqGrid ожидает, что функция будет передана. Вот почему myFunction работает, а "myFunction" - нет. В любом случае, чтобы решить вашу проблему, вам нужно вывести код:

"formatter": myFunction


Чтобы углубиться, вы можете увидеть в исходном файле jqGrid grid.base.js, что средство форматирования напрямую использует функцию, но если передается строка, эта строка передается в $.fn.fmatter:

    formatter = function (rowId, cellval , colpos, rwdat, _act){
        var cm = ts.p.colModel[colpos],v;
        if(typeof cm.formatter !== 'undefined') {
            var opts= {rowId: rowId, colModel:cm, gid:ts.p.id, pos:colpos };
            if($.isFunction( cm.formatter ) ) {
                v = cm.formatter.call(ts,cellval,opts,rwdat,_act);
            } else if($.fmatter){
                v = $.fn.fmatter(cm.formatter, cellval,opts, rwdat, _act);
            } else {
                v = cellVal(cellval);
            }
        } else {
            v = cellVal(cellval);
        }
        return v;
    },

Если этой функции еще нет в jquery.fmatter.js тогда я бы ожидал, что произойдет ошибка, когда сетка попытается ее использовать.

person Justin Ethier    schedule 22.05.2012
comment
Да, чувак. Чтобы использовать функцию, заключенную в кавычки, мы можем отформатировать модуль, чтобы его можно было легко расширить. Подробнее о создании общей функции форматирования - person user1404404; 23.05.2012
comment
Итак ... это ответило на ваш вопрос? - person Justin Ethier; 24.05.2012