tsx:add ref and parent support

This commit is contained in:
pengfei.zhou
2021-09-02 11:39:51 +08:00
committed by osborn
parent c1f39de8e3
commit aeff0a06dc
13 changed files with 265 additions and 62 deletions

View File

@@ -65,6 +65,25 @@ export type NativeViewModel = {
};
}
export class Ref<T extends View> {
private view?: T;
set current(v: T) {
this.view = v
}
get current() {
if (!!!this.view) {
throw new Error("Ref is empty")
}
return this.view
}
}
export function makeRef() {
return new Ref
}
export abstract class View implements Modeling {
private __dirty_props__!: { [index: string]: Model | undefined }
@@ -345,6 +364,18 @@ export abstract class View implements Modeling {
@Property
flexConfig?: FlexConfig
set props(props: Partial<this>) {
this.apply(props)
}
set parent(v: Group) {
this.in(v)
}
set ref(ref: Ref<this>) {
ref.current = this
}
doAnimation(context: BridgeContext, animation: IAnimation) {
return this.nativeChannel(context, "doAnimation")(animation.toModel()).then((args) => {
for (let key in args) {

View File

@@ -47,6 +47,25 @@ export type NativeViewModel = {
};
}
export class Ref<T extends View> {
private view?: T;
set current(v: T) {
this.view = v
}
get current() {
if (!!!this.view) {
throw new Error("Ref is empty")
}
return this.view
}
}
export function makeRef<T extends View>(): Ref<T> {
return new Ref
}
export abstract class View implements Modeling {
@Property
width: number = 0
@@ -358,6 +377,14 @@ export abstract class View implements Modeling {
this.apply(props)
}
set parent(v: Group) {
this.in(v)
}
set ref(ref: Ref<this>) {
ref.current = this
}
doAnimation(context: BridgeContext, animation: IAnimation) {
return this.nativeChannel(context, "doAnimation")(animation.toModel()).then((args) => {
for (let key in args) {

View File

@@ -1,4 +1,5 @@
import { Group, View } from "../ui/view";
import { layoutConfig } from "./layoutconfig";
import { ClassType } from "./types";
export const jsx = {
@@ -8,10 +9,9 @@ export const jsx = {
...children: View[]
): T {
const e = new constructor();
e.layoutConfig = layoutConfig().fit()
if (config) {
for (let key in config) {
Reflect.set(e, key, Reflect.get(config, key, config), e);
}
e.apply(config)
}
if (children && children.length > 0) {
if (e instanceof Group) {