feat:add pureCallEntityMethod,avoid hook affects

This commit is contained in:
pengfei.zhou
2021-04-14 16:53:38 +08:00
committed by osborn
parent b762b9db4b
commit 009e8734b6
37 changed files with 266 additions and 209 deletions

View File

@@ -2032,7 +2032,6 @@ var List = /** @class */ (function (_super) {
function List() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.cachedViews = new Map;
_this.ignoreDirtyCallOnce = false;
_this.itemCount = 0;
_this.batchCount = 15;
return _this;
@@ -2059,17 +2058,8 @@ var List = /** @class */ (function (_super) {
this.cachedViews.set("" + itemIdx, view);
return view;
};
List.prototype.isDirty = function () {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return _super.prototype.isDirty.call(this);
};
List.prototype.renderBunchedItems = function (start, length) {
var _this = this;
this.ignoreDirtyCallOnce = true;
return new Array(Math.max(0, Math.min(length, this.itemCount - start))).fill(0).map(function (_, idx) {
var listItem = _this.getItem(start + idx);
return listItem.toModel();
@@ -2185,7 +2175,6 @@ var Slider = /** @class */ (function (_super) {
function Slider() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.cachedViews = new Map;
_this.ignoreDirtyCallOnce = false;
_this.itemCount = 0;
_this.batchCount = 3;
return _this;
@@ -2199,17 +2188,8 @@ var Slider = /** @class */ (function (_super) {
this.cachedViews.set("" + itemIdx, view);
return view;
};
Slider.prototype.isDirty = function () {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return _super.prototype.isDirty.call(this);
};
Slider.prototype.renderBunchedItems = function (start, length) {
var _this = this;
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map(function (_, idx) {
var slideItem = _this.getItem(start + idx);
return slideItem.toModel();
@@ -2560,7 +2540,6 @@ var FlowLayout = /** @class */ (function (_super) {
function FlowLayout() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.cachedViews = new Map;
_this.ignoreDirtyCallOnce = false;
_this.columnCount = 2;
_this.itemCount = 0;
_this.batchCount = 15;
@@ -2584,17 +2563,8 @@ var FlowLayout = /** @class */ (function (_super) {
this.cachedViews.set("" + itemIdx, view);
return view;
};
FlowLayout.prototype.isDirty = function () {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return _super.prototype.isDirty.call(this);
};
FlowLayout.prototype.renderBunchedItems = function (start, length) {
var _this = this;
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map(function (_, idx) {
var listItem = _this.getItem(start + idx);
return listItem.toModel();

View File

@@ -1531,7 +1531,6 @@ class List extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 15;
}
@@ -1557,16 +1556,7 @@ class List extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
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();
@@ -1660,7 +1650,6 @@ class Slider extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 3;
}
@@ -1673,16 +1662,7 @@ class Slider extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();
@@ -1948,7 +1928,6 @@ class FlowLayout extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.columnCount = 2;
this.itemCount = 0;
this.batchCount = 15;
@@ -1971,16 +1950,7 @@ class FlowLayout extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();

View File

@@ -1398,6 +1398,29 @@ var doric = (function (exports) {
loge("Cannot find method for context id:" + contextId + ",method name is:" + methodName);
}
}
function pureCallEntityMethod(contextId, methodName, args) {
var arguments$1 = arguments;
var context = gContexts.get(contextId);
if (context === undefined) {
loge("Cannot find context for context id:" + contextId);
return;
}
if (context.entity === undefined) {
loge("Cannot find holder for context id:" + contextId);
return;
}
if (Reflect.has(context.entity, methodName)) {
var argumentsList = [];
for (var i = 2; i < arguments.length; i++) {
argumentsList.push(arguments$1[i]);
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList);
}
else {
loge("Cannot find method for context id:" + contextId + ",method name is:" + methodName);
}
}
function jsObtainEntry(contextId) {
var context = jsObtainContext(contextId);
var exportFunc = function (constructor) {
@@ -13775,6 +13798,7 @@ var doric = (function (exports) {
exports.jsObtainEntry = jsObtainEntry;
exports.jsRegisterModule = jsRegisterModule;
exports.jsReleaseContext = jsReleaseContext;
exports.pureCallEntityMethod = pureCallEntityMethod;
Object.defineProperty(exports, '__esModule', { value: true });

View File

@@ -1397,6 +1397,27 @@ var doric = (function (exports) {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
function pureCallEntityMethod(contextId, methodName, args) {
const context = gContexts.get(contextId);
if (context === undefined) {
loge(`Cannot find context for context id:${contextId}`);
return;
}
if (context.entity === undefined) {
loge(`Cannot find holder for context id:${contextId}`);
return;
}
if (Reflect.has(context.entity, methodName)) {
const argumentsList = [];
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList);
}
else {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
function jsObtainEntry(contextId) {
const context = jsObtainContext(contextId);
const exportFunc = (constructor) => {
@@ -1538,6 +1559,7 @@ var doric = (function (exports) {
exports.jsObtainEntry = jsObtainEntry;
exports.jsRegisterModule = jsRegisterModule;
exports.jsReleaseContext = jsReleaseContext;
exports.pureCallEntityMethod = pureCallEntityMethod;
Object.defineProperty(exports, '__esModule', { value: true });

View File

@@ -1426,6 +1426,27 @@ function jsCallEntityMethod(contextId, methodName, args) {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
function pureCallEntityMethod(contextId, methodName, args) {
const context = gContexts.get(contextId);
if (context === undefined) {
loge(`Cannot find context for context id:${contextId}`);
return;
}
if (context.entity === undefined) {
loge(`Cannot find holder for context id:${contextId}`);
return;
}
if (Reflect.has(context.entity, methodName)) {
const argumentsList = [];
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList);
}
else {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
function jsObtainEntry(contextId) {
const context = jsObtainContext(contextId);
const exportFunc = (constructor) => {
@@ -1567,6 +1588,7 @@ var doric = /*#__PURE__*/Object.freeze({
__require__: __require__,
jsRegisterModule: jsRegisterModule,
jsCallEntityMethod: jsCallEntityMethod,
pureCallEntityMethod: pureCallEntityMethod,
jsObtainEntry: jsObtainEntry,
jsCallbackTimer: jsCallbackTimer
});
@@ -3030,7 +3052,6 @@ class List extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 15;
}
@@ -3056,16 +3077,7 @@ class List extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
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();
@@ -3159,7 +3171,6 @@ class Slider extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 3;
}
@@ -3172,16 +3183,7 @@ class Slider extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();
@@ -3447,7 +3449,6 @@ class FlowLayout extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.columnCount = 2;
this.itemCount = 0;
this.batchCount = 15;
@@ -3470,16 +3471,7 @@ class FlowLayout extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();

3
doric-js/index.d.ts vendored
View File

@@ -607,7 +607,6 @@ declare module 'doric/lib/src/widget/list' {
animated?: boolean;
}): Promise<any>;
reset(): void;
isDirty(): boolean;
toModel(): NativeViewModel;
}
export function list(config: Partial<List>): List;
@@ -631,7 +630,6 @@ declare module 'doric/lib/src/widget/slider' {
batchCount: number;
onPageSlided?: (index: number) => void;
loop?: boolean;
isDirty(): boolean;
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;
getSlidedPage(context: BridgeContext): Promise<number>;
}
@@ -722,7 +720,6 @@ declare module 'doric/lib/src/widget/flowlayout' {
y: number;
}) => void;
reset(): void;
isDirty(): boolean;
toModel(): NativeViewModel;
}
export function flowlayout(config: Partial<FlowLayout>): FlowLayout;

View File

@@ -23,6 +23,7 @@ export declare function jsReleaseContext(id: string): void;
export declare function __require__(name: string): any;
export declare function jsRegisterModule(name: string, moduleObject: any): void;
export declare function jsCallEntityMethod(contextId: string, methodName: string, args?: any): any;
export declare function pureCallEntityMethod(contextId: string, methodName: string, args?: any): any;
declare type ClassType<T> = new (...args: any) => T;
export declare function jsObtainEntry(contextId: string): () => ClassType<object> | ((constructor: ClassType<object>) => ClassType<object>);
export declare function jsCallbackTimer(timerId: number): void;

View File

@@ -215,6 +215,27 @@ export function jsCallEntityMethod(contextId, methodName, args) {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
export function pureCallEntityMethod(contextId, methodName, args) {
const context = gContexts.get(contextId);
if (context === undefined) {
loge(`Cannot find context for context id:${contextId}`);
return;
}
if (context.entity === undefined) {
loge(`Cannot find holder for context id:${contextId}`);
return;
}
if (Reflect.has(context.entity, methodName)) {
const argumentsList = [];
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList);
}
else {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`);
}
}
export function jsObtainEntry(contextId) {
const context = jsObtainContext(contextId);
const exportFunc = (constructor) => {

View File

@@ -8,7 +8,6 @@ export declare class FlowLayoutItem extends Stack {
}
export declare class FlowLayout extends Superview {
private cachedViews;
private ignoreDirtyCallOnce;
allSubviews(): IterableIterator<FlowLayoutItem> | FlowLayoutItem[];
columnCount: number;
columnSpace?: number;
@@ -29,7 +28,6 @@ export declare class FlowLayout extends Superview {
}) => void;
reset(): void;
private getItem;
isDirty(): boolean;
private renderBunchedItems;
toModel(): NativeViewModel;
}

View File

@@ -35,7 +35,6 @@ export class FlowLayout extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.columnCount = 2;
this.itemCount = 0;
this.batchCount = 15;
@@ -58,16 +57,7 @@ export class FlowLayout extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();

View File

@@ -9,7 +9,6 @@ export declare class ListItem extends Stack {
}
export declare class List extends Superview {
private cachedViews;
private ignoreDirtyCallOnce;
allSubviews(): IterableIterator<ListItem> | ListItem[];
itemCount: number;
renderItem: (index: number) => ListItem;
@@ -31,7 +30,6 @@ export declare class List extends Superview {
}): Promise<any>;
reset(): void;
private getItem;
isDirty(): boolean;
private renderBunchedItems;
toModel(): NativeViewModel;
}

View File

@@ -35,7 +35,6 @@ export class List extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 15;
}
@@ -61,16 +60,7 @@ export class List extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
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();

View File

@@ -9,7 +9,6 @@ export declare class SlideItem extends Stack {
}
export declare class Slider extends Superview {
private cachedViews;
private ignoreDirtyCallOnce;
allSubviews(): IterableIterator<SlideItem>;
itemCount: number;
renderPage: (index: number) => SlideItem;
@@ -17,7 +16,6 @@ export declare class Slider extends Superview {
onPageSlided?: (index: number) => void;
loop?: boolean;
private getItem;
isDirty(): boolean;
private renderBunchedItems;
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;
getSlidedPage(context: BridgeContext): Promise<number>;

View File

@@ -35,7 +35,6 @@ export class Slider extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 3;
}
@@ -48,16 +47,7 @@ export class Slider extends Superview {
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();

View File

@@ -238,6 +238,26 @@ export function jsCallEntityMethod(contextId: string, methodName: string, args?:
}
}
export function pureCallEntityMethod(contextId: string, methodName: string, args?: any) {
const context = gContexts.get(contextId)
if (context === undefined) {
loge(`Cannot find context for context id:${contextId}`)
return
}
if (context.entity === undefined) {
loge(`Cannot find holder for context id:${contextId}`)
return
}
if (Reflect.has(context.entity, methodName)) {
const argumentsList: any = []
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i])
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList)
} else {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`)
}
}
type ClassType<T> = new (...args: any) => T
export function jsObtainEntry(contextId: string) {

View File

@@ -276,6 +276,27 @@ export function jsCallEntityMethod(contextId: string, methodName: string, args?:
}
}
export function pureCallEntityMethod(contextId: string, methodName: string, args?: any) {
const context = gContexts.get(contextId)
if (context === undefined) {
loge(`Cannot find context for context id:${contextId}`)
return
}
if (context.entity === undefined) {
loge(`Cannot find holder for context id:${contextId}`)
return
}
if (Reflect.has(context.entity, methodName)) {
const argumentsList: any = []
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i])
}
return Reflect.apply(Reflect.get(context.entity, methodName), context.entity, argumentsList)
} else {
loge(`Cannot find method for context id:${contextId},method name is:${methodName}`)
}
}
type ClassType<T> = new (...args: any) => T
export function jsObtainEntry(contextId: string) {

View File

@@ -27,7 +27,6 @@ export class FlowLayoutItem extends Stack {
export class FlowLayout extends Superview {
private cachedViews: Map<string, FlowLayoutItem> = new Map
private ignoreDirtyCallOnce = false
allSubviews() {
if (this.loadMoreView) {
@@ -80,18 +79,7 @@ export class FlowLayout extends Superview {
this.cachedViews.set(`${itemIdx}`, view)
return view
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false
//Ignore the dirty call once.
return false
}
return super.isDirty()
}
private renderBunchedItems(start: number, length: number) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx)
return listItem.toModel()

View File

@@ -30,7 +30,6 @@ export class ListItem extends Stack {
export class List extends Superview {
private cachedViews: Map<string, ListItem> = new Map
private ignoreDirtyCallOnce = false
allSubviews() {
if (this.loadMoreView) {
@@ -83,17 +82,7 @@ export class List extends Superview {
return view
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false
//Ignore the dirty call once.
return false
}
return super.isDirty()
}
private renderBunchedItems(start: number, length: number) {
this.ignoreDirtyCallOnce = true
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()

View File

@@ -31,8 +31,6 @@ export class SlideItem extends Stack {
export class Slider extends Superview {
private cachedViews: Map<string, SlideItem> = new Map
private ignoreDirtyCallOnce = false
allSubviews() {
return this.cachedViews.values()
}
@@ -58,17 +56,7 @@ export class Slider extends Superview {
return view
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false
//Ignore the dirty call once.
return false
}
return super.isDirty()
}
private renderBunchedItems(start: number, length: number) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx)
return slideItem.toModel()