head view manipulation api changed

This commit is contained in:
王劲鹏
2020-01-09 11:17:44 +08:00
committed by osborn
parent 88d45c2967
commit 56852286e3
10 changed files with 219 additions and 128 deletions

View File

@@ -35,12 +35,14 @@ export function animate(context) {
root.clean();
return ret;
}
for (let v of panel.allHeadViews()) {
if (v.isDirty()) {
const model = v.toModel();
const ret = it.animateRender(model);
it.clean();
return ret;
for (let map of panel.allHeadViews()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
const ret = it.animateRender(model);
it.clean();
return ret;
}
}
}
throw new Error('Cannot find any animated elements');

View File

@@ -8,17 +8,17 @@ export function popover(context) {
return {
show: (view) => {
if (panel) {
panel.addHeadView(view);
panel.addHeadView("popover", view);
}
return context.popover.show(view.toModel());
},
dismiss: (view = undefined) => {
if (panel) {
if (view) {
panel.removeHeadView(view);
panel.removeHeadView("popover", view);
}
else {
panel.clearHeadViews();
panel.clearHeadViews("popover");
}
}
return context.popover.dismiss(view ? { id: view.viewId } : undefined);

View File

@@ -12,10 +12,10 @@ export declare abstract class Panel {
private __data__?;
private __root__;
private headviews;
addHeadView(v: View): void;
allHeadViews(): IterableIterator<View>;
removeHeadView(v: View | string): void;
clearHeadViews(): void;
addHeadView(type: string, v: View): void;
allHeadViews(): IterableIterator<Map<string, View>>;
removeHeadView(type: string, v: View | string): void;
clearHeadViews(type: string): void;
getRootView(): Root;
getInitData(): object | undefined;
private __init__;

View File

@@ -42,22 +42,37 @@ export class Panel {
onDestroy() { }
onShow() { }
onHidden() { }
addHeadView(v) {
this.headviews.set(v.viewId, v);
addHeadView(type, v) {
let map = this.headviews.get(type);
if (map) {
map.set(v.viewId, v);
}
else {
map = new Map;
map.set(v.viewId, v);
this.headviews.set(type, map);
}
}
allHeadViews() {
return this.headviews.values();
}
removeHeadView(v) {
if (v instanceof View) {
this.headviews.delete(v.viewId);
}
else {
this.headviews.delete(v);
removeHeadView(type, v) {
if (this.headviews.has(type)) {
let map = this.headviews.get(type);
if (map) {
if (v instanceof View) {
map.delete(v.viewId);
}
else {
map.delete(v);
}
}
}
}
clearHeadViews() {
this.headviews.clear();
clearHeadViews(type) {
if (this.headviews.has(type)) {
this.headviews.delete(type);
}
}
getRootView() {
return this.__root__;
@@ -124,8 +139,10 @@ export class Panel {
hookBeforeNativeCall() {
if (Environment.platform !== 'h5') {
this.__root__.clean();
for (let v of this.headviews.values()) {
v.clean();
for (let map of this.headviews.values()) {
for (let v of map.values()) {
v.clean();
}
}
}
}
@@ -137,10 +154,12 @@ export class Panel {
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);
for (let map of this.headviews.values()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
this.nativeRender(model);
}
}
}
}
@@ -151,11 +170,13 @@ export class Panel {
this.nativeRender(model);
this.__root__.clean();
}
for (let v of this.headviews.values()) {
if (v.isDirty()) {
const model = v.toModel();
this.nativeRender(model);
v.clean();
for (let map of this.headviews.values()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
this.nativeRender(model);
v.clean();
}
}
}
});