Перейти к основному содержимому

Интеграция со Svelte

Подсказка

Перед чтением этой документации вы должны быть знакомы с основными концепциями и паттернами Svelte. Для освежения знаний обратитесь к документации Svelte.

DHTMLX Spreadsheet совместим со Svelte. Мы подготовили примеры кода использования DHTMLX Spreadsheet со Svelte. Подробнее см. соответствующий Пример на GitHub.

Создание проекта

К сведению

Перед созданием нового проекта установите Vite (необязательно) и Node.js.

Чтобы создать проект Svelte JS, выполните следующую команду:

npm create vite@latest

Назовём проект my-svelte-spreadsheet-app.

Установка зависимостей

Перейдите в директорию приложения:

cd my-svelte-spreadsheet-app

Затем установите зависимости и запустите приложение. Для этого используйте пакетный менеджер:

  • если вы используете yarn, выполните следующие команды:
yarn
yarn dev // or yarn dev
  • если вы используете npm, выполните следующие команды:
npm install
npm run dev

Приложение должно запуститься на localhost (например, http://localhost:3000).

Создание Spreadsheet

Теперь нужно получить исходный код DHTMLX Spreadsheet. Сначала остановите приложение и установите пакет Spreadsheet.

Шаг 1. Установка пакета

Скачайте ознакомительный пакет Spreadsheet и следуйте инструкциям в README-файле. Обратите внимание, что ознакомительная версия Spreadsheet доступна только в течение 30 дней.

Шаг 2. Создание компонента

Теперь нужно создать компонент Svelte для добавления Spreadsheet в приложение. Создайте новый файл в директории src/ и назовите его Spreadsheet.svelte.

Импорт исходных файлов

Откройте файл Spreadsheet.svelte и импортируйте исходные файлы Spreadsheet. Обратите внимание, что:

  • если вы используете PRO-версию и устанавливаете пакет Spreadsheet из локальной папки, пути к импорту выглядят следующим образом:
Spreadsheet.svelte
<script>
import { Spreadsheet } from 'dhx-spreadsheet-package';
import 'dhx-spreadsheet-package/codebase/spreadsheet.css';
</script>

Обратите внимание, что в зависимости от используемого пакета исходные файлы могут быть минифицированы. В этом случае убедитесь, что вы импортируете CSS-файл как spreadsheet.min.css.

  • если вы используете ознакомительную версию Spreadsheet, укажите следующие пути:
Spreadsheet.svelte
<script>
import { Spreadsheet } from '@dhx/trial-spreadsheet';
import '@dhx/trial-spreadsheet/codebase/spreadsheet.min.css';
</script>

В этом руководстве показана настройка ознакомительной версии Spreadsheet.

Настройка контейнера и добавление Spreadsheet

Чтобы отобразить Spreadsheet на странице, нужно создать контейнер для Spreadsheet и инициализировать этот компонент с помощью соответствующего конструктора:

Spreadsheet.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Spreadsheet } from "@dhx/trial-spreadsheet";
import "@dhx/trial-spreadsheet/codebase/spreadsheet.min.css"

let container; // initialize container for Spreadsheet
let spreadsheet;

onMount(() => {
// initialize the Spreadsheet component
spreadsheet = new Spreadsheet(container, {});
});

onDestroy(() => {
spreadsheet.destructor(); // destruct Spreadsheet
});
</script>

<div bind:this={container} class="widget"></div>

Добавление стилей

Чтобы Spreadsheet отображался корректно, необходимо задать важные стили для Spreadsheet и его контейнера в главном CSS-файле проекта:

app.css
/* specify styles for initial page */
html,
body,
#app { /* make sure that you use the #app root container */
height: 100%;
padding: 0;
margin: 0;
}

/* specify styles for the Spreadsheet container */
.widget {
height: 100%;
}

Загрузка данных

Чтобы добавить данные в Spreadsheet, нужно предоставить набор данных. Создайте файл data.js в директории src/ и добавьте в него данные:

data.js
export function getData() {
return {
styles: {
bold: {
"font-weight": "bold"
},
right: {
"justify-content": "flex-end",
"text-align": "right"
}
},
data: [
{ cell: "a1", value: "Country", css:"bold" },
{ cell: "b1", value: "Product", css:"bold" },
{ cell: "c1", value: "Price", css:"right bold" },
{ cell: "d1", value: "Amount", css:"right bold" },
{ cell: "e1", value: "Total Price", css:"right bold" },

{ cell: "a2", value: "Ecuador" },
{ cell: "b2", value: "Banana" },
{ cell: "c2", value: 6.68, format: "currency" },
{ cell: "d2", value: 430 },
{ cell: "e2", value: 2872.4, format: "currency" },

{ cell: "a3", value: "Belarus" },
{ cell: "b3", value: "Apple" },
{ cell: "c3", value: 3.75, format: "currency" },
{ cell: "d3", value: 600 },
{ cell: "e3", value: 2250, format: "currency" },

{ cell: "a4", value: "Peru" },
{ cell: "b4", value: "Grapes" },
{ cell: "c4", value: 7.69, format: "currency" },
{ cell: "d4", value: 740 },
{ cell: "e4", value: 5690.6, format: "currency" },

// more cells with data
]
}
}

Затем откройте файл App.svelte, импортируйте данные и передайте их в только что созданный компонент <Spreadsheet/> как props:

App.svelte
<script>
import Spreadsheet from "./Spreadsheet.svelte";
import { getData } from "./data.js";

const data = getData();
</script>

<Spreadsheet data={data} />

Перейдите в файл Spreadsheet.svelte и примените переданные props к Spreadsheet методом parse():

Spreadsheet.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Spreadsheet } from "@dhx/trial-spreadsheet";
import "@dhx/trial-spreadsheet/codebase/spreadsheet.min.css"

export let data;

let container;
let spreadsheet;

onMount(() => {
spreadsheet = new Spreadsheet(container, {});
spreadsheet.parse(data);
});

onDestroy(() => {
spreadsheet.destructor();
});
</script>

<div bind:this={container} class="widget"></div>

Теперь компонент Spreadsheet готов к использованию. При добавлении элемента на страницу он инициализирует Spreadsheet с данными. При необходимости можно также задать нужные параметры конфигурации. Посетите документацию API Spreadsheet для просмотра полного списка доступных свойств.

Обработка событий

Когда пользователь выполняет действие в Spreadsheet, виджет вызывает событие. Эти события можно использовать для обнаружения действия и выполнения нужного кода. Смотрите полный список событий.

Откройте Spreadsheet.svelte и дополните метод onMount() следующим образом:

Spreadsheet.svelte
<script>
// ...
let spreadsheet;

onMount(() => {
spreadsheet = new Spreadsheet(container, {})

spreadsheet.events.on("afterFocusSet", function(cell){
console.log("Focus is set on a cell " + spreadsheet.selection.getSelectedCell());
console.log(cell);
});
});

onDestroy(() => {
spreadsheet.destructor();
});
</script>

// ...

После этого при запуске приложения на странице должен отобразиться Spreadsheet, загруженный с данными.

DHTMLX Spreadsheet, инициализированный с тестовыми данными в приложении Svelte

Теперь у вас есть базовая настройка для интеграции DHTMLX Spreadsheet со Svelte. Вы можете настроить код в соответствии с вашими конкретными требованиями. Финальный пример можно найти на GitHub.