render-table
Описание
Срабатывает после обработки конфигурации виджета и непосредственно перед рендерингом таблицы
Позволяет изменить итоговую конфигурацию таблицы на лету или полностью предотвратить её рендеринг.
Использование
"render-table": ({
config: {
columns?: any[],
data?: any[],
footer?: boolean,
sizes?: {
rowHeight?: number,
headerHeight?: number,
columnWidth?: number,
footerHeight?: number
},
split?: {
left?: number;
right?: number;
},
tree?: boolean,
cellStyle?: (row: any, col: any) => string,
}
}) => boolean | void;
Параметры
Калбэк события принимает объект config со следующими параметрами:
columns- (опционально) массив столбцов, где каждый объект содержит следующие параметры:id(number) - (обязательно) идентификатор столбцаcell(any) - (опционально) шаблон с содержимым ячейки (см. Добавление шаблонов через хелпер template)template- (опционально) шаблон, определённый через свойствоtableShapefields(array) - (опционально) определяет поля в иерархическом столбце в режиме дерева. Отражает поля, отображаемые в данном столбце на разных уровняхfield- (опционально) строка, являющаяся идентификатором поляmethod(string) - (опционально) метод, если он задан для поля в данном столбцеmethods(array) - (опционально) определяет методы, применяемые к полям в иерархическом столбце в режиме дереваformat(string or object) - (обязательно) формат даты или чис ла (см. Применение форматов к полям)isNumeric(boolean) - (опционально) определяет, содержит ли столбец числовые значенияisTotal(boolean) - (опционально) определяет, является ли столбец итоговымarea(string) - (опционально) область, в которой отображается столбец: "rows", "columns", "values"header- (опционально) массив ячеек заголовка со следующими свойствами для каждой ячейки:text(string) - (опционально) текст ячейки, форматированное значение или значение, обработанное шаблоном предикатаrowspan(number) - (опционально) количество строк, которые должен охватывать заголовокcolspan(number) - (опционально) количество столбцов, которые должен охватывать заголовокvalue(any) - (обязательно) исходное значение, если ячейка принадлежит области "columns"field(string) - (обязательно) поле, значение которого отображается, если ячейка принадлежит области "columns"method(string) - (обязательно) предикат поля, если ячейка принадлежит области "columns" и предикат заданformat(string or object) - формат даты или числа (см. Применение форматов к полям)
footer- (опционально) метка заголовка или объект с настройками футера, аналогичными настройкам заголовка
data- (опционально) массив объектов с данными для таблицы; каждый объект представляет строку:id(number) - (обязательно) идентификатор строкиvalues(array) - (обязательно) массив с данными строкиopen(boolean) - (опционально) состояние ветки$level(boolean) - (опционально) индекс ветки
footer- (опционально) если установлено значение true, футер таблицы отображается внизу таблицы; по умолчанию установлено значение false и футер не виденsizes- (опционально) объект с настройками размеров таблицы: columnWidth, footerHeight, headerHeight, rowHeightsplit(object) - (опционально) объект со следующими свойствами:left(number) - количество фиксированных столбцов слеваright(number) - количество фиксирован ных столбцов справа
tree- (опционально) определяет, включён ли режим дерева (true, если включён)cellStyle- (опционально) функция, применяющая пользовательский стиль к ячейке. Принимает объекты строки и столбца и возвращает строку с именем CSS-класса:(row, col) => string
Для обработки внутренних событий можно использовать методы Event Bus
Возвращаемое значение
Калбэк может возвращать boolean или void.
Если обработчик события возвращает false, операция будет заблокирована. В данном случае это предотвратит рендеринг таблицы.
Пример
Следующий пример показывает, как вывести объект config в консоль и добавить футер.
const table = new pivot.Pivot("#root", {
fields,
data: dataset,
config: {
rows: ["studio", "genre"],
columns: [],
values: [
{
field: "title",
method: "count"
},
{
field: "score",
method: "max"
}
]
}
});
table.api.intercept("render-table", (ev) => {
console.log(ev.config); //вывести объект config
console.log(ev.config.columns); //вывести массив columns
ev.config.footer = true;
ev.config.columns[0].footer = ["Custom footer"];
// возврат "false" здесь предотвратит рендеринг таблицы
});
Следующий пример показывает, как раскрывать/сворачивать все строки по нажатию кнопки. Режим дерева должен быть включён через свойство tableShape.
const table = new pivot.Pivot("#root", {
tableShape: {
tree: true,
},
fields,
data: dataset,
config: {
rows: ["type", "studio"],
columns: [],
values: [
{
field: "score",
method: "max"
},
{
field: "rank",
method: "min"
},
{
field: "members",
method: "sum"
},
{
field: "episodes",
method: "count"
}
]
}
});
const api = table.api;
const tableApi = api.getTable();
// закрываем все ветки таблицы при обновлении конфигурации таблицы
api.intercept("render-table", (ev) => {
ev.config.data.forEach((r) => (r.open = false));
// возврат "false" здесь предотвратит рендеринг таблицы
// return false;
});
function openAll() {
tableApi.exec("open-row", { id: 0, nested: true });
}
function closeAll() {
tableApi.exec("close-row", { id: 0, nested: true });
}
Смотрите также, как настроить функцию разделения с помощью события render-table: Фиксация столбцов.
Полезная статья: Хелпер pivot.template
Связанный пример: Pivot 2. Пользовательские фиксированные столбцы (ваше число)