feat:when in H5 environment,must set check dirty to next macro task loop incase the changing occured in promise.then function which is scheduled in micro task loop
This commit is contained in:
parent
9677207844
commit
4b1fcc439d
@ -733,9 +733,7 @@ class Panel {
|
|||||||
}, undefined);
|
}, undefined);
|
||||||
}
|
}
|
||||||
nativeRender(model) {
|
nativeRender(model) {
|
||||||
if (this.context) {
|
this.context.shader.render(model);
|
||||||
this.context.shader.render(model);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
this.__root__.clean();
|
this.__root__.clean();
|
||||||
@ -745,16 +743,32 @@ class Panel {
|
|||||||
}
|
}
|
||||||
hookAfterNativeCall() {
|
hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
nativeEmpty();
|
if (Environment.platform === 'h5') {
|
||||||
if (this.__root__.isDirty()) {
|
setTimeout(() => {
|
||||||
const model = this.__root__.toModel();
|
if (this.__root__.isDirty()) {
|
||||||
this.nativeRender(model);
|
const model = this.__root__.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
for (let v of this.headviews.values()) {
|
||||||
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
for (let v of this.headviews.values()) {
|
else {
|
||||||
if (v.isDirty()) {
|
nativeEmpty();
|
||||||
const model = v.toModel();
|
if (this.__root__.isDirty()) {
|
||||||
|
const model = this.__root__.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
}
|
}
|
||||||
|
for (let v of this.headviews.values()) {
|
||||||
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2181,9 +2181,7 @@ class Panel {
|
|||||||
}, undefined);
|
}, undefined);
|
||||||
}
|
}
|
||||||
nativeRender(model) {
|
nativeRender(model) {
|
||||||
if (this.context) {
|
this.context.shader.render(model);
|
||||||
this.context.shader.render(model);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
this.__root__.clean();
|
this.__root__.clean();
|
||||||
@ -2193,16 +2191,32 @@ class Panel {
|
|||||||
}
|
}
|
||||||
hookAfterNativeCall() {
|
hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
nativeEmpty();
|
if (Environment.platform === 'h5') {
|
||||||
if (this.__root__.isDirty()) {
|
setTimeout(() => {
|
||||||
const model = this.__root__.toModel();
|
if (this.__root__.isDirty()) {
|
||||||
this.nativeRender(model);
|
const model = this.__root__.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
for (let v of this.headviews.values()) {
|
||||||
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
for (let v of this.headviews.values()) {
|
else {
|
||||||
if (v.isDirty()) {
|
nativeEmpty();
|
||||||
const model = v.toModel();
|
if (this.__root__.isDirty()) {
|
||||||
|
const model = this.__root__.toModel();
|
||||||
this.nativeRender(model);
|
this.nativeRender(model);
|
||||||
}
|
}
|
||||||
|
for (let v of this.headviews.values()) {
|
||||||
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel();
|
||||||
|
this.nativeRender(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ export type BridgeContext = { [index: string]: { [index: string]: (args?: any) =
|
|||||||
declare global {
|
declare global {
|
||||||
const context: BridgeContext
|
const context: BridgeContext
|
||||||
const Environment: {
|
const Environment: {
|
||||||
platform: "Android" | "iOS" | "Qt",
|
platform: "Android" | "iOS" | "Qt" | "h5",
|
||||||
|
|
||||||
platformVersion: string,
|
platformVersion: string,
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import { View, Group } from "./view"
|
|||||||
import { loge } from '../util/log'
|
import { loge } from '../util/log'
|
||||||
import { Model } from '../util/types'
|
import { Model } from '../util/types'
|
||||||
import { Root } from '../widget/layouts'
|
import { Root } from '../widget/layouts'
|
||||||
|
import { BridgeContext } from '../runtime/global'
|
||||||
|
|
||||||
|
|
||||||
export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
|
export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||||
@ -34,7 +35,7 @@ type Frame = { width: number, height: number }
|
|||||||
declare function nativeEmpty(): void
|
declare function nativeEmpty(): void
|
||||||
|
|
||||||
export abstract class Panel {
|
export abstract class Panel {
|
||||||
context?: any
|
context!: BridgeContext
|
||||||
onCreate() { }
|
onCreate() { }
|
||||||
onDestroy() { }
|
onDestroy() { }
|
||||||
onShow() { }
|
onShow() { }
|
||||||
@ -139,9 +140,7 @@ export abstract class Panel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private nativeRender(model: Model) {
|
private nativeRender(model: Model) {
|
||||||
if (this.context) {
|
this.context.shader.render(model)
|
||||||
this.context.shader.render(model)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private hookBeforeNativeCall() {
|
private hookBeforeNativeCall() {
|
||||||
@ -153,16 +152,31 @@ export abstract class Panel {
|
|||||||
|
|
||||||
private hookAfterNativeCall() {
|
private hookAfterNativeCall() {
|
||||||
//Here insert a native call to ensure the promise is resolved done.
|
//Here insert a native call to ensure the promise is resolved done.
|
||||||
nativeEmpty()
|
if (Environment.platform === 'h5') {
|
||||||
if (this.__root__.isDirty()) {
|
setTimeout(() => {
|
||||||
const model = this.__root__.toModel()
|
if (this.__root__.isDirty()) {
|
||||||
this.nativeRender(model)
|
const model = this.__root__.toModel()
|
||||||
}
|
this.nativeRender(model)
|
||||||
for (let v of this.headviews.values()) {
|
}
|
||||||
if (v.isDirty()) {
|
for (let v of this.headviews.values()) {
|
||||||
const model = v.toModel()
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel()
|
||||||
|
this.nativeRender(model)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0)
|
||||||
|
} else {
|
||||||
|
nativeEmpty()
|
||||||
|
if (this.__root__.isDirty()) {
|
||||||
|
const model = this.__root__.toModel()
|
||||||
this.nativeRender(model)
|
this.nativeRender(model)
|
||||||
}
|
}
|
||||||
|
for (let v of this.headviews.values()) {
|
||||||
|
if (v.isDirty()) {
|
||||||
|
const model = v.toModel()
|
||||||
|
this.nativeRender(model)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user