# HG changeset patch # User cin # Date 2020-08-26 14:30:27 # Node ID 9b77ac3bf8f200876450ad50c308a9441a7f39c7 # Parent 19678034e92b224c0790ecd899124ddb53ef7b9d Added @prototype decorator diff --git a/src/main/ts/declare.ts b/src/main/ts/declare.ts --- a/src/main/ts/declare.ts +++ b/src/main/ts/declare.ts @@ -240,3 +240,18 @@ export function bind(params: NodeBindSpe }; } } + +/** Создает в прототипе указанное свойство со значение `undefined`, данный + * декоратор следует использовать для свойств, у которых нет значения по-умолчанию + * и они не могут быть `null | undefined` + */ +export function prototype(): (p: any, name: string) => void; +/** Создает в прототипе свойство с указанным значением. + * @param value Значение, которое будет указано в прототипе + */ +export function prototype(value: T):

(p: P, name: K) => void; +export function prototype(value?: T) { + return

(p: P, name: K) => { + p[name] = value as any; + }; +} diff --git a/src/main/ts/tsx/DjxFragment.ts b/src/main/ts/tsx/DjxFragment.ts --- a/src/main/ts/tsx/DjxFragment.ts +++ b/src/main/ts/tsx/DjxFragment.ts @@ -1,9 +1,11 @@ import { _Widget } from "./WidgetContext"; import { MapOf } from "@implab/core-amd/interfaces"; +import { prototype } from "../declare"; /** Special widget used to create a document fragment */ export class DjxFragment implements _Widget { + @prototype() domNode: Node; containerNode?: Node;