Разработка и публикация клиентского компонента элемента управления
Клиентский компонент элемента управления — программный компонент, обеспечивающий загрузку и функционирование элемента управления на стороне клиента. Клиентский компонент предоставляет графический интерфейс элемента управления.
Клиентский компонент элемента управления является вариантом клиентского расширения.
Чтобы создать клиентский компонент элемента управления, выполните приведенную далее инструкцию.
-
Создайте проект клиентского расширения. Не публикуйте его.
-
Создайте в папке
src
файл TypeScript (.ts
,.tsx
) с кодом клиентского компонента.Клиентский компонент состоит из трёх блоков кода:-
Класс параметров:
export class SuperControlParams extends BaseControlParams { @r firstProperty?: string; @rw secondProperty?: boolean; @apiEvent firstEvent?: BasicApiEvent<IEventArgs>; }
-
Интерфейс состояния:
export interface SuperControlState extends SuperControlParams, BaseControlState { internalFirstState: boolean; }
-
Класс реализации:
export class SuperControlImpl extends BaseControlImpl<SuperControlParams, SuperControlState> { construct() { (1) super.construct(); this.state.firstEvent = SimpleEvent.Create(this.state.wrapper); } renderControl() { (2) return ( <div /> ); } }
1 Инициализация компонента. 2 VirtualDOM элемента управления. -
Интерфейсный класс:
export class SuperControl extends BaseControl<SuperControlParams, SuperControlState> { protected createParams() { return new SuperControlParams(); (1) } protected createImpl() { (2) return new SuperControlImpl(this.props, this.state); } }
1 Инициализация параметров. 2 Инициализация класса реализации.
В случае простого элемента управления, лишенного сложной внутренней логики, реализация элемента управления может быть помещена в интерфейсный класс.
export class SuperSimpleControl extends BaseControl<SuperControlParams, SuperControlState> { protected createParams() { return new SuperControlParams(); } protected createImpl() { (1) return new ControlImpl(this.props, this.state, this.renderControl.bind(this)); } renderControl() { (2) return ( <div /> ); } }
1 Метод createImpl
в данном случае возвращает экземпляр стандартного типаControlImpl
, в которые передана функция, возвращающая VirtualDOM элемента управления2 Метод может иметь любое название, кроме "render". -
-
Измените содержимое файла
Index.ts
.import { extensionManager } from "@docsvision/webclient/System/ExtensionManager"; import { SuperControl } from "./Controls/SuperControl"; (1) extensionManager.registerExtension({ (2) name: "Client extension with controls", version: "1.0", controls: [{ controlTypeName: "SuperControl", constructor: SuperControl }] (3) (4) })
1 Добавьте строку импорта элемента управления. 2 Добавьте в registerExtension поле controls, в значении которого укажите описание элемента управления. 3 controlTypeName
— название типа элемента управления, которое указано в описателе элемента управления4 constructor
— интерфейсный класс элемента управления. -
Соберите проект клиентского расширения командой
npm run build
. -
Скопируйте полученный файл
%BuildDir%\extension.js
на сервер Web-клиента в папку/lib/docsvision/webclient/Content/Modules/%Каталог Решения%
. -
После завершения отладки, соберите и опубликуйте на сервере Web-клиента "релизную версию" клиентского расширения. "Релизная версия" собирается командой
npm run build:prod
.