Skip to content

Данные, строки и ячейки

rows — полная локальная коллекция, доступная текущему экземпляру Table. Обычно она приходит в Component SFC через prop, связанный с DataView или Store.

vue
<script setup lang="ts">
defineProps<{
  rows: Array<{
    id: number
    number: string
    customer: { name: string }
    status: string
  }>
}>()
</script>

<template>
  <Table :rows="rows" row-key="id">
    <Column key="number" title="Номер" />
    <Column key="customer.name" title="Клиент" />
    <Column key="status" title="Статус" />
  </Table>
</template>

Identity строки

row-key указывает поле со стабильной identity. По умолчанию используется id. Identity должна быть уникальной и сохраняться при сортировке, paging, виртуализации и обновлении коллекции.

В отличие от Column.key, row-key не является вложенным dot-path. Если identity находится внутри объекта, подготовьте плоское поле в DataView.

Не используйте rowIndex как identity. Индекс меняется при сортировке и фильтрации. Значение rowKey, напротив, сохраняет исходный тип: если id в данных является числом, в SFC context он также остаётся числом.

Контекст ячейки

Внутри Column и Cell доступны:

LocalЗначение
rowПолная текущая строка
rowKeyЗначение поля row-key с исходным типом
rowIndexИндекс в полной отсортированной коллекции
columnKeyКлюч текущей колонки
valueЗначение строки по пути columnKey
columnMetaCompiled metadata текущей Column
vue
<Column key="status" title="Статус">
  <Cell>
    <Flex row gap="2" align="center">
      <Dot :tone="row.statusTone" />
      <Text>{{ value }}</Text>
    </Flex>
  </Cell>
</Column>

Cell необязателен. Без него renderer выводит значение по Column.key. Если внутри Column есть визуальные children без обёртки Cell, они получают тот же контекст.

Обработка browser events на Cell

Cell поддерживает общий атрибут :on. Это позволяет привязать реакцию к жесту конкретной ячейки без дополнительного Box или Flex:

vue
<Column key="status" title="Статус">
  <Cell
    :on="{
      event: 'click',
      modifiers: { shift: true },
      reaction: action({
        identity: 'status.inspect',
        input: { rowId: rowKey, row, columnKey, value, event: event() },
      }),
    }"
  >
    <Text>{{ value }}</Text>
  </Cell>
</Column>

В Visual editor обработчики находятся в настройках выбранной колонки. При первом добавлении редактор автоматически оборачивает существующих прямых children колонки в Cell, не заменяя их Source.

Обновление rows

Новый массив строк не сбрасывает authored-конфигурацию Table. Runtime:

  • пересчитывает sort и paging;
  • ограничивает номер страницы новым диапазоном;
  • удаляет из selection identities, которых больше нет;
  • повторно рендерит только актуальное окно строк.

Для записи изменений обратно в данные используйте semantic Event и Store-owned Update. Подробный путь описан в редактировании ячеек.