Документация для разработчиков
Темная тема

JS API

Получение экземпляра грида

import {Type} from 'main.core';

const grid: BX.Main.grid = BX.Main.gridManager.getById('MY_GRID_ID')?.instance;
if (Type.isObject(grid))
{
	// use API here
}

Основные методы


Работа с коллекцией строк

import {Type} from 'main.core';

const grid: BX.Main.grid = BX.Main.gridManager.getById('MY_GRID_ID')?.instance;
if (Type.isObject(grid))
{
	// Обертка над коллекцией строк 
	const rowsCollectionWrapper: BX.Grid.Rows = grid.getRows();
	
	// Список всех строк, включая шапку и подвал
	const rowsList: Array = rowsCollectionWrapper.getRows();

	// Строки тела таблицы
	const bodyRowsList: Array = rowsCollectionWrapper.getBodyChild();

	// Выбранные строки 
	const selectedRowsList: Array = rowsCollectionWrapper.getSelected();
	
	// Идентификаторы выбранных строк 
	const selectedRowsIdsList: Array = rowsCollectionWrapper.getSelectedIds();

	// Получение экземпляра строки по ID
	const row: Array = rowsCollectionWrapper.getById('myRowId');

	// Получение экземпяра строки по ссылке на ноду
	const row2: Array = rowsCollectionWrapper.get(rowNode);
	
	// Выбрать все строки
	void rowsCollectionWrapper.selectAll();

	// Отменить выбор всех строк
	void rowsCollectionWrapper.unselectAll();

	// Включить инлайн-редактирование
	void rowsCollectionWrapper.editSelected();

	// Отключить инлайн-редактирование
	void rowsCollectionWrapper.editSelectedCancel();
}

Добавление и обновление строк, показ заглушки (Без перезагрузки)

import {Type} from 'main.core';

const grid: BX.Main.grid = BX.Main.gridManager.getById('MY_GRID_ID')?.instance;
if (Type.isObject(grid))
{
	// Обертка 
	const gridRealtime: BX.Grid.Realtime = grid.getRealtime();
	
	// Добавление новой строки 
	gridRealtime.addRow({
	id: 10,
	insertBefore: 3,
	columns: {
		colId1: 'Column 1 content',
		colId2: 'Column 2 content',
		colId3: 'Column 3 content',
	},
	actions: [
		{id: 1, text: 'My Action', onclick: 'callMyAction()'},
		],
	});

	// Доступные параметры новой строки
	type AddRowOptions = {
		id: number | string,
		actions?: Array<{[key: string]: any}>,
		columns?: {[key: string]: any},
		append?: true,
		prepend?: true,
		insertBefore?: number | string,
		insertAfter?: number | string,
		animation?: boolean,
		cellActions?: Array<{
			'class': Array<$Value | $Value>,
			events?: {[eventName: string]: (BaseEvent) => void},
			attributes?: {[key: string]: any},
		}>,
	};

    // Добавление строки со счетчиками 
	gridRealtime.addRow({
		...,
		counters: {
			columnId: {
				type: BX.Grid.Counters.Type.LEFT_ALIGNED,
				color: BX.Grid.Counters.Color.DANGER,
				value: 77,
				events: {
					click: console.log,
				},
				'class': 'my-custom-counter-class',
			},
		},
	});
	
	// Добавление/обновление счетчиков в существующей строке 
	const row: BX.Grid.Row = grid.getRows().getById(rowId);
	row.setCounters({
		columnId: {
			type: BX.Grid.Counters.Type.LEFT_ALIGNED,
			color: BX.Grid.Counters.Color.DANGER,
			value: 77,
		},
	});
	
	// Заглушка по умолчанию (Нет данных)
	gridRealtime.showStub();

	// Заглушка по дефолтному шаблону заголовок + описание
	gridRealtime.showStub({
		content: {
			title: 'Текст заглушки',
			description: 'Описание',
		}
	});

	// Кастомная заглушка 
	gridRealtime.showStub({
		content: '<div ...>...</div>', // string | HTML | Element
	});
}


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Роман Гонюков
Сообщение не промодерировано, возможны ошибки и неточности.
Как добавить строку, объяснили, а как её удалить?
3
Евгений Кулик
Сообщение не промодерировано, возможны ошибки и неточности.
файл в ядре с JS API на 10 тысяч строк, а документацию умудрились сделать на одной странице с парочкой примеров) :(  
0
Александр Дегалевич
Сообщение не промодерировано, возможны ошибки и неточности.
Код
<?
$arHeaders = [
    'COL1'=> [
        "id" => "COL1",
        "name" => "Колонка 1",
        "default" => 1,
        "sticked" => true,
        'sticked_default' => true,

        "class" => "js-tm-fixed-columns",
        "shift" => true
    ],
    'COL2'=> [
        "id" => "COL2",
        "name" => "Колонка 2",
        "default" => 1,
    ],
];

$APPLICATION->includeComponent('bitrix:main.ui.grid', '', [
    'GRID_ID' => "LBTRM_COLS_CALENDAR_".$USER->GetID(),
    'HEADERS' => $arHeaders,
    'ROWS' => [],

    'SHOW_SELECTED_COUNTER' => false,
    'SHOW_CHECK_ALL_CHECKBOXES' => false,
    'SHOW_ROW_CHECKBOXES' => false,
    'SHOW_ROW_ACTIONS_MENU' => false,
    'SHOW_GRID_SETTINGS_MENU' => false,

    'SHOW_ACTION_PANEL' => false,
    'ALLOW_STICKED_COLUMNS' => true,
    'DISABLE_HEADERS_TRANSFORM' => false,

    'AJAX_MODE' => 'Y',
    'AJAX_OPTION_JUMP' => "N",
    'AJAX_OPTION_STYLE' => "N",
    'AJAX_OPTION_HISTORY' => "N",
    'NAV_OBJECT' => false,
    'SHOW_NAVIGATION_PANEL'     => true,
    'SHOW_PAGINATION'           => true,
    'SHOW_TOTAL_COUNTER'        => false,
    'SHOW_PAGESIZE'             => true,
    'PAGINATION' => false,

    'ALLOW_COLUMNS_SORT' => false,
    'ALLOW_ROWS_SORT' => false,
    'ALLOW_COLUMN_RESIZE' => true,
    'ALLOW_HORIZONTAL_SCROLL' => true,
    'ALLOW_SORT' => false,
    'ALLOW_PIN_HEADER' => true,
    'ENABLE_COLLAPSIBLE_ROWS' => false,

    'ACTION_PANEL' => [],

    'MESSAGES' => [] ?: true,
    'FLEXIBLE_LAYOUT' => true,
]);
?>

<sc ript>
var Grid = BX.Main.gridManager.getById('<?="LBTRM_COLS_CALENDAR_".$USER->GetID();?>');
Grid = Grid ? Grid.instance : null;

if (Grid)
{
    var gridRealtime = Grid.getRealtime();
    // Добавление новой строки
    gridRealtime.addRow({
        id: 1,
        append: true,
        columns: {
            COL1: 'Column 1 content',
            COL2: 'Column 2 content',
        },
    });
}
</sc ript>

0
Александр Дегалевич
Сообщение не промодерировано, возможны ошибки и неточности.
Код
<?
$arHeaders = [
    'COL1'=> [
        "id" => "COL1",
        "name" => "Колонка 1",
        "default" => 1,
        "sticked" => true,
        'sticked_default' => true,

        "class" => "js-tm-fixed-columns",
        "shift" => true
    ],
    'COL2'=> [
        "id" => "COL2",
        "name" => "Колонка 2",
        "default" => 1,
    ],
];

$APPLICATION->includeComponent('bitrix:main.ui.grid', '', [
    'GRID_ID' => "LBTRM_COLS_CALENDAR_".$USER->GetID(),
    'HEADERS' => $arHeaders,
    'ROWS' => [],

    'SHOW_SELECTED_COUNTER' => false,
    'SHOW_CHECK_ALL_CHECKBOXES' => false,
    'SHOW_ROW_CHECKBOXES' => false,
    'SHOW_ROW_ACTIONS_MENU' => false,
    'SHOW_GRID_SETTINGS_MENU' => false,

    'SHOW_ACTION_PANEL' => false,
    'ALLOW_STICKED_COLUMNS' => true,
    'DISABLE_HEADERS_TRANSFORM' => false,

    'AJAX_MODE' => 'Y',
    'AJAX_OPTION_JUMP' => "N",
    'AJAX_OPTION_STYLE' => "N",
    'AJAX_OPTION_HISTORY' => "N",
    'NAV_OBJECT' => false,
    'SHOW_NAVIGATION_PANEL'     => true,
    'SHOW_PAGINATION'           => true,
    'SHOW_TOTAL_COUNTER'        => false,
    'SHOW_PAGESIZE'             => true,
    'PAGINATION' => false,

    'ALLOW_COLUMNS_SORT' => false,
    'ALLOW_ROWS_SORT' => false,
    'ALLOW_COLUMN_RESIZE' => true,
    'ALLOW_HORIZONTAL_SCROLL' => true,
    'ALLOW_SORT' => false,
    'ALLOW_PIN_HEADER' => true,
    'ENABLE_COLLAPSIBLE_ROWS' => false,

    'ACTION_PANEL' => [],

    'MESSAGES' => [] ?: true,
    'FLEXIBLE_LAYOUT' => true,
]);
?>

<sc ript>
var Grid = BX.Main.gridManager.getById('<?="LBTRM_COLS_CALENDAR_".$USER->GetID();?>');
Grid = Grid ? Grid.instance : null;

if (Grid)
{
    var gridRealtime = Grid.getRealtime();
    // Добавление новой строки
    gridRealtime.addRow({
        id: 1,
        append: true,
        columns: {
            COL1: 'Column 1 content',
            COL2: 'Column 2 content',
        },
    });
}
</sc ript>

0
Александр Дегалевич
Сообщение не промодерировано, возможны ошибки и неточности.
Нельзя просто взять документацию Битркиса и работать...

import {Type} from 'main.core';
-> Uncaught TypeError: Failed to resolve module specifier "main.core". Relative references must start with either "/", "./", or "../".

Огонь!
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх