optimize: clean view's props after being bunched fetched from native
This commit is contained in:
@@ -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) {
|
||||
|
@@ -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) {
|
||||
|
@@ -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) {
|
||||
|
@@ -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
8
doric-js/lib/src/widget/utils.d.ts
vendored
Normal 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;
|
||||
};
|
||||
};
|
12
doric-js/lib/src/widget/utils.js
Normal file
12
doric-js/lib/src/widget/utils.js
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user