Изменить формат экспортируемых столбцов компонента угловой сетки

Я использую компонент ag-grid в своем коде и хотел бы, чтобы столбцы дат форматировались в соответствии с потребностями клиентов при экспорте в формате CSV. В настоящее время используется формат по умолчанию для объекта даты js. Код можно найти здесь:

https://github.com/ceolter/ag-grid/blob/master/src/ts/csvCreator.ts

Я мог бы внести следующее изменение в код напрямую, но это, очевидно, плохая практика. Я новичок в JavaScript, и мне было интересно, есть ли стандартный способ расширить/переопределить функциональность в такой библиотеке.

Предлагаемое изменение (обратите внимание, что это изменение, которое я внес в версию js, а не версию github, которая использует ts):

--- Common/scripts/agGrid/ag-grid.js    (revision b0e7d54e61e6371b0cab94428cb4329f9f62db11)
+++ Common/scripts/agGrid/ag-grid.js    (revision )
@@ -1848,7 +1848,11 @@
+                var exportDateAs = function(dt){if (dt instanceof Date)
+                    return dt.getFullYear() + "/" + (dt.getMonth()+1) + "/" + dt.getDate();
+                };

@@ -1883,6 +1887,9 @@
+                            if (valueForCell instanceof Date){
+                                valueForCell = exportDateAs(valueForCell);
+                            }

person kayakpim    schedule 05.02.2016    source источник


Ответы (2)


Похоже, эта функция была добавлена ​​в более новой версии: https://www.ag-grid.com/javascript-grid-export/

person Robharrisaz    schedule 25.10.2016

Мое решение состояло в том, чтобы вручную обновить функцию в компоненте сетки ag следующим образом. Кажется, это работает, но не уверен, что это лучшая практика. Есть желающие прокомментировать?

Замените функцию в объекте на мою:

ag.grid.CsvCreator.prototype.getDataAsCsv = agCustom.getDataAsCsv;

Новая функция

var agCustom;
(function (agCustom) {

    // This is a modified version of the getDataAsCsv from
    // agGrid to allow date formatting in csv export
    agCustom.getDataAsCsv = function (params) {
        var LINE_SEPARATOR = '\r\n';
...
        var exportDateAs = function(dt){if (dt instanceof Date)
            return dt.getFullYear() + "/" + (dt.getMonth()+1) + "/" + dt.getDate();
...
                else {
                    valueForCell = _this.valueService.getValue(column.colDef, node.data, node);
                    if (valueForCell instanceof Date){
                        valueForCell = exportDateAs(valueForCell);
                    }
...
})(agCustom || (agCustom = {}));
person kayakpim    schedule 08.02.2016