import { Observable } from '@tanbo/stream'; import { Action, Operation } from '../model/types'; import { Component } from '../model/component'; import { Model } from './observe'; export type Paths = Array; /** * 与 host(Component / Slot)相关、由宿主在构造函数里挂在 {@link ChangeMarker.hostHooks} 上的协作逻辑。 */ export type ChangeMarkerPathResolution = { resolved: true; segment: string | number; } | { resolved: false; }; export interface ChangeMarkerHostHooks { resolvePathSegment(childHost: object): ChangeMarkerPathResolution; detachHostedMarkers?(): void; } /** * 用来标识数据模型的数据变化 */ export declare class ChangeMarker { host: object; onForceChange: Observable; onChange: Observable; onChangeBefore: Observable; onSelfChange: Observable; get irrevocableUpdate(): boolean; get dirty(): boolean; get changed(): boolean; parentModel: Model | null; /** * 宿主模型可在此挂上与路径解析、detach 相关的扩展(默认未设置),与 {@link parentModel} 类似由外部赋值。 */ hostHooks?: ChangeMarkerHostHooks; private detachCallbacks; private _irrevocableUpdate; private _dirty; private _changed; private _changeBefore; private changeEvent; private selfChangeEvent; private forceChangeEvent; private changeBeforeEvent; constructor(host: object); addDetachCallback(callback: () => void): void; getPaths(): Paths; beforeChange(): void; forceMarkDirtied(source?: Component): void; forceMarkChanged(source?: Component): void; markAsDirtied(operation: Operation): void; markAsChanged(operation: Operation): void; rendered(): void; reset(): void; detach(): void; private resetComponentState; private getPathInParent; } /** * 在回调函数内改变组件状态时,将更改的状态标记为不可撤回的 * @param fn */ export declare function irrevocableUpdate(fn: () => void): void;