Пользовательский форматтер jqGrid - PullRequest
2 голосов
/ 21 мая 2010

Для одного из столбцов в моем jqGrid я предоставляю пользовательскую функцию форматирования. Я привожу некоторые особые случаи, но если эти условия не выполняются, я бы хотел прибегнуть к использованию встроенного метода утилиты форматирования даты. Не похоже, что я получаю правильную комбинацию $ .extend () для создания опций, ожидаемых методом.

Моя colModel для этого столбца:

{ name:'expires', 
    index:'7',
    width:90,
    align:"right",
    resizable: false,
    formatter: expireFormat,
    formatoptions: {srcformat:"l, F d, Y g:i:s A",newformat:"n/j/Y"}
},

И пример того, что я пытаюсь сделать

function expireFormat(cellValue, opts, rowObject) {
    if (cellValue == null || cellValue == 1451520000) {
        // a specific date that should show as blank
        return '';
    } else {
        // here is where I'd like to just call the $.fmatter.util.DateFormat
        var dt = new Date(cellValue * 1000);
        var op = $.extend({},opts.date);
        if(!isUndefined(opts.colModel.formatoptions)) {
            op = $.extend({},op,opts.colModel.formatoptions);
        }
        return $.fmatter.util.DateFormat(op.srcformat,dt,op.newformat,op);
    }
}

(Исключение выдается в кишках этого метода DateFormat, похоже, где он пытается прочитать в свойство масок передаваемых параметров)

EDIT:

$ .extend, который поместил все в нужное место, получал его из того глобального свойства, где его установила библиотека i18n, $. Jgrid.formatter.date .

var op = $.extend({}, $.jgrid.formatter.date);
if(!isUndefined(opts.colModel.formatoptions)) {
    op = $.extend({}, op, opts.colModel.formatoptions);
}
return $.fmatter.util.DateFormat(op.srcformat,dt.toLocaleString(),op.newformat,op);

1 Ответ

4 голосов
/ 21 мая 2010

В исходном коде jqGrid различные параметры передаются в средство форматирования, когда оно является встроенной функцией, и при использовании специального средства форматирования:

    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 };
            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;
    },

Итак, в основном происходит, когда используется встроенный форматер, cm.formatter передается в качестве аргумента. Мне нужно это подтвердить, но в зависимости от получаемой ошибки это выглядит как копия formatter параметров из grid.locale-en.js (или любой используемой вами версии файла i18n). Поэтому при внутреннем вызове средство форматирования будет содержать дополнительные параметры, такие как masks - то, на чем ваш код не выполняется.

В качестве меры предосторожности я бы попытался добавить masks к вашей переменной op. Если это решит вашу проблему, тогда отлично, в противном случае продолжайте добавлять другие недостающие опции обратно в ваш код, пока он не заработает.

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...