본문으로 건너뛰기

Svelte와의 통합

Svelte의 기본 개념과 패턴을 먼저 익혀두시기 바랍니다. 복습이 필요하다면 Svelte 문서를 참고하세요.

DHTMLX RichText는 Svelte와 함께 사용할 수 있습니다. 전체 코드 예제는 GitHub 데모를 참고하세요.

프로젝트 생성

정보

새 프로젝트를 생성하기 전에 Node.js와 (선택 사항으로) Vite를 설치하세요.

이 튜토리얼에서는 Vite 기반의 Svelte 프로젝트를 사용합니다. SvelteKit 및 기타 옵션에 대해서는 Svelte 프로젝트 가이드를 참고하세요.

새 Vite 프로젝트를 시작합니다:

npm create vite@latest

의존성 설치

스캐폴더에서 프로젝트 이름을 입력하라고 하면 my-svelte-richtext-app을 사용하세요. 그런 다음 새 디렉터리로 이동합니다:

cd my-svelte-richtext-app

패키지 매니저를 사용하여 의존성을 설치하고 개발 서버를 시작합니다.

yarn을 사용하는 경우 다음을 실행합니다:

yarn
yarn dev

npm을 사용하는 경우 다음을 실행합니다:

npm install
npm run dev

앱은 localhost에서 실행됩니다(예: http://localhost:3000).

RichText 생성

앱을 중지하고 RichText 패키지를 설치합니다.

1단계. 패키지 설치

RichText 평가판 패키지를 다운로드하고 README 파일의 단계를 따릅니다. 평가판 라이선스는 30일간 유효합니다.

2단계. 컴포넌트 생성

애플리케이션에 RichText를 추가할 Svelte 컴포넌트를 생성합니다. src/ 디렉터리에 Richtext.svelte라는 새 파일을 만드세요.

소스 파일 가져오기

Richtext.svelte를 열고 RichText 소스 파일을 가져옵니다.

로컬 폴더에서 설치한 PRO 버전의 경우 다음을 사용합니다:

Richtext.svelte
<script>
import { Richtext } from 'dhx-richtext-package';
import 'dhx-richtext-package/dist/richtext.css';
</script>

평가판의 경우 다음을 사용합니다:

Richtext.svelte
<script>
import { Richtext } from '@dhx/trial-richtext';
import '@dhx/trial-richtext/dist/richtext.css';
</script>

이 튜토리얼에서는 RichText 평가판을 사용합니다.

컨테이너 설정 및 RichText 초기화

RichText의 컨테이너 요소를 설정하고 onMount() 내부에서 컴포넌트를 초기화합니다. RichText를 제거하려면 onDestroy() 내부에서 destructor() 메서드를 호출합니다:

Richtext.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Richtext } from "@dhx/trial-richtext";
import "@dhx/trial-richtext/dist/richtext.css";

let richtext_container; // RichText용 컨테이너
let editor;

onMount(() => {
// RichText 컴포넌트 초기화
editor = new Richtext(richtext_container, {});
});

onDestroy(() => {
editor?.destructor(); // RichText 제거
});
</script>

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

스타일 추가

프로젝트의 메인 CSS 파일(예: src/app.css)에 RichText와 해당 컨테이너의 스타일을 추가합니다:

app.css
/* 기본 페이지 스타일 */
html,
body {
height: 100%;
padding: 0;
margin: 0;
}

/* RichText 컨테이너 */
.component_container {
height: 100%;
margin: 0 auto;
}

/* RichText 위젯 */
.widget {
height: calc(100% - 56px);
}

데이터 로드

RichText에 데이터를 제공합니다. src/ 디렉터리에 data.js 파일을 생성합니다:

data.js
export function getData() {
const value = `
<h2>RichText 2.0</h2>
<p>Repository at <a href="https://git.webix.io/xbs/richtext">https://git.webix.io/xbs/richtext</a></p>
<p><img src="https://placecats.com/500/300" style={{width: '500px', height: '300px'}}></p>`;
return { value };
}

App.svelte를 열고 데이터를 가져온 다음, value를 <RichText/> 컴포넌트에 prop으로 전달합니다:

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

const { value } = getData();
</script>

<RichText value={value} />

Richtext.svelte를 열고 prop 값을 RichText 설정에 전달합니다:

Richtext.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Richtext } from "@dhx/trial-richtext";
import "@dhx/trial-richtext/dist/richtext.css";

export let value;

let richtext_container;
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {
value
// 기타 설정 속성
});
});

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

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

또는 onMount() 내부에서 setValue() 메서드를 호출하여 RichText에 데이터를 로드할 수 있습니다:

Richtext.svelte
<script>
import { onMount, onDestroy } from "svelte";
import { Richtext } from "@dhx/trial-richtext";
import "@dhx/trial-richtext/dist/richtext.css";

export let value;

let richtext_container;
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {
// 기타 설정 속성
});

editor.setValue(value);
});

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

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

RichText 컴포넌트를 사용할 준비가 되었습니다. <RichText/> 요소가 마운트되면 Svelte가 데이터와 함께 에디터를 렌더링합니다. 전체 설정 옵션 목록은 RichText API 개요를 참고하세요.

이벤트 처리

RichText는 사용자 동작 시 이벤트를 발생시킵니다. api.on() 메서드를 사용하여 이벤트를 구독하고 사용자 입력에 반응할 수 있습니다. 전체 이벤트 목록을 참고하세요.

Richtext.svelte를 열고 onMount() 훅을 업데이트합니다. 아래 예제는 모든 print 이벤트 발생 시 메시지를 로그에 기록합니다:

Richtext.svelte
<script>
// ...
let editor;

onMount(() => {
editor = new Richtext(richtext_container, {});

editor.api.on("print", () => {
console.log("The document is printing");
});
});

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

// ...

앱을 시작하면 페이지에 데이터와 함께 RichText가 렌더링되는 것을 확인할 수 있습니다.

샘플 콘텐츠와 함께 Svelte 애플리케이션에 렌더링된 DHTMLX RichText

이제 Svelte에서 RichText 통합이 완료되었습니다. 필요에 맞게 코드를 커스터마이즈하세요. 전체 예제는 GitHub에서 확인할 수 있습니다.