feat:complete the implement of JSX

This commit is contained in:
pengfei.zhou
2021-09-03 13:42:25 +08:00
committed by osborn
parent 266d20782a
commit bec0d44af0
23 changed files with 322 additions and 150 deletions

View File

@@ -465,6 +465,9 @@ export abstract class Superview extends View {
return super.toModel()
}
}
export type ViewArray = View[]
export type ViewFragment = View | ViewArray
export abstract class Group extends Superview {
@@ -478,5 +481,19 @@ export abstract class Group extends Superview {
this.children.push(view)
this.dirtyProps.children = this.children.map(e => e.viewId)
}
private addInnerElement(e: View | ViewFragment | ViewFragment[] | undefined | null) {
if (e instanceof Array) {
e.forEach(e => this.addInnerElement(e))
} else if (e instanceof View) {
this.addChild(e)
} else {
loge(`Not allowed to add ${typeof e}`)
}
}
set innerElement(e: View | ViewFragment | ViewFragment[] | undefined | null) {
this.addInnerElement(e)
}
}

View File

@@ -491,7 +491,11 @@ export abstract class Superview extends View {
}
}
export abstract class Group extends Superview {
export type ViewArray = View[]
export type ViewFragment = View | ViewArray
export abstract class Group extends Superview implements JSX.ElementChildrenAttribute {
readonly children: View[] = new Proxy([], {
set: (target, index, value) => {
@@ -519,5 +523,18 @@ export abstract class Group extends Superview {
removeAllChildren() {
this.children.length = 0
}
private addInnerElement(e: View | ViewFragment | ViewFragment[] | undefined | null) {
if (e instanceof Array) {
e.forEach(e => this.addInnerElement(e))
} else if (e instanceof View) {
this.addChild(e)
} else {
loge(`Not allowed to add ${typeof e}`)
}
}
set innerElement(e: View | ViewFragment | ViewFragment[] | undefined | null) {
this.addInnerElement(e)
}
}