optimize: clean view's props after being bunched fetched from native

This commit is contained in:
pengfei.zhou
2023-03-22 15:18:08 +08:00
committed by osborn
parent a08221a501
commit 3f290e332a
18 changed files with 303 additions and 136 deletions

View File

@@ -25,6 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { Stack } from './layouts';
import { Property, Superview, View } from '../ui/view';
import { layoutConfig } from '../util/index.util';
import { deepClone } from './utils';
export class FlowLayoutItem extends Stack {
}
__decorate([
@@ -83,10 +84,11 @@ export class FlowLayout extends Superview {
return view;
}
renderBunchedItems(start, length) {
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
const items = new Array(Math.max(0, Math.min(length, this.itemCount - start)))
.fill(0).map((_, idx) => this.getItem(start + idx));
const ret = items.map(e => deepClone(e.toModel()));
items.forEach(e => e.clean());
return ret;
}
toModel() {
if (this.loadMoreView) {

View File

@@ -25,6 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { View, Property, Superview } from "../ui/view";
import { Stack } from "./layouts";
import { layoutConfig } from "../util/layoutconfig";
import { deepClone } from "./utils";
export class HorizontalListItem extends Stack {
}
__decorate([
@@ -82,10 +83,11 @@ export class HorizontalList extends Superview {
return view;
}
renderBunchedItems(start, length) {
return new Array(Math.max(0, Math.min(length, this.itemCount - start))).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
const items = new Array(Math.max(0, Math.min(length, this.itemCount - start)))
.fill(0).map((_, idx) => this.getItem(start + idx));
const ret = items.map(e => deepClone(e.toModel()));
items.forEach(e => e.clean());
return ret;
}
toModel() {
if (this.loadMoreView) {

View File

@@ -25,6 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { View, Property, Superview } from "../ui/view";
import { Stack } from "./layouts";
import { layoutConfig } from "../util/layoutconfig";
import { deepClone } from "./utils";
export class ListItem extends Stack {
}
__decorate([
@@ -86,10 +87,11 @@ export class List extends Superview {
return view;
}
renderBunchedItems(start, length) {
return new Array(Math.max(0, Math.min(length, this.itemCount - start))).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
const items = new Array(Math.max(0, Math.min(length, this.itemCount - start)))
.fill(0).map((_, idx) => this.getItem(start + idx));
const ret = items.map(e => deepClone(e.toModel()));
items.forEach(e => e.clean());
return ret;
}
toModel() {
if (this.loadMoreView) {

View File

@@ -25,6 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { Superview, View, Property } from "../ui/view";
import { Stack } from "./layouts";
import { layoutConfig } from "../util/layoutconfig";
import { deepClone } from "./utils";
export class SlideItem extends Stack {
}
__decorate([
@@ -60,10 +61,11 @@ export class Slider extends Superview {
return view;
}
renderBunchedItems(start, length) {
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();
});
const items = new Array(Math.max(0, Math.min(length, this.itemCount - start)))
.fill(0).map((_, idx) => this.getItem(start + idx));
const ret = items.map(e => deepClone(e.toModel()));
items.forEach(e => e.clean());
return ret;
}
slidePage(context, page, smooth = false) {
return this.nativeChannel(context, "slidePage")({ page, smooth });

8
doric-js/lib/src/widget/utils.d.ts vendored Normal file
View File

@@ -0,0 +1,8 @@
import { NativeViewModel } from "../ui/view";
export declare function deepClone(nativeViewModel: NativeViewModel): {
id: string;
type: string;
props: {
[x: string]: import("../..").Model;
};
};

View File

@@ -0,0 +1,12 @@
export function deepClone(nativeViewModel) {
const ret = {
id: nativeViewModel.id,
type: nativeViewModel.type,
props: Object.assign({}, nativeViewModel.props),
};
if (nativeViewModel.props.subviews) {
ret.props.subviews = nativeViewModel.props.subviews
.map(e => deepClone(e));
}
return ret;
}