From 459bd643e69a7843d1c9f903536fd676cacd9256 Mon Sep 17 00:00:00 2001 From: xuyanfeng Date: Thu, 17 Jun 2021 22:35:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BAObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/src/devtools/data.ts | 7 ++++++ source/src/devtools/inject.ts | 40 ++++++++++++++++++++++++------- source/src/devtools/propertys.vue | 7 ++++-- source/src/devtools/ui-prop.vue | 33 ++++++++++++++++++------- 4 files changed, 68 insertions(+), 19 deletions(-) diff --git a/source/src/devtools/data.ts b/source/src/devtools/data.ts index 3c3c897..dc87c7c 100644 --- a/source/src/devtools/data.ts +++ b/source/src/devtools/data.ts @@ -42,10 +42,17 @@ export class ArrayData extends Info { } export class ObjectData extends Info { + data: Array = []; + constructor() { super(); this.type = DataType.Object; } + + add(info: Property) { + this.data.push(info); + return this; + } } export class NullOrUndefinedData extends Info { diff --git a/source/src/devtools/inject.ts b/source/src/devtools/inject.ts index d9c7861..67ef2ec 100644 --- a/source/src/devtools/inject.ts +++ b/source/src/devtools/inject.ts @@ -276,15 +276,17 @@ class CCInspector { let hex = propertyValue.toHEX(); info = new ColorData(`#${hex}`); } else if (Array.isArray(propertyValue)) { - info = new ArrayData(); + let keys = []; for (let i = 0; i < propertyValue.length; i++) { - let propPath = path.concat(i.toString()); - let itemData = this._genInfoData(propertyValue, i.toString(), propPath); - if (itemData) { - info.add(new Property(i.toString(), itemData)); - } + keys.push(i); } - } else if (propertyValue instanceof Object) { + info = this._buildObjectOrArrayData({ + data: new ArrayData(), + path: path, + value: propertyValue, + keys: keys, + }) + } else { !info && (info = this._buildVecData({ // @ts-ignore ctor: cc.Vec3, @@ -308,8 +310,12 @@ class CCInspector { path: path, value: propertyValue, })) - !info && (info = new ObjectData()); - } else { + !info && (info = this._buildObjectOrArrayData({ + data: new ObjectData(), + path: path, + value: propertyValue, + keys: Object.keys(propertyValue), + })); } break; } @@ -322,6 +328,22 @@ class CCInspector { return info; } + _buildObjectOrArrayData(options: any) { + let propertyValue: Object = options.value; + let path: Array = options.path; + let data: ObjectData | ArrayData = options.data; + let keys: Array = options.keys; + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let propPath = path.concat(key.toString()); + let itemData = this._genInfoData(propertyValue, key, propPath); + if (itemData) { + data.add(new Property(key.toString(), itemData)) + } + } + return data; + } + _getGroupData(node: any) { let nodeGroup = new Group(node.constructor.name); let keys = this._getNodeKeys(node); diff --git a/source/src/devtools/propertys.vue b/source/src/devtools/propertys.vue index 8d9cad9..bb070b6 100644 --- a/source/src/devtools/propertys.vue +++ b/source/src/devtools/propertys.vue @@ -2,8 +2,10 @@
- - +
+ + +
{{ group.name }}
@@ -59,6 +61,7 @@ export default class properties extends Vue { }) } } + _evalCode(code: string) { if (chrome && chrome.devtools) { chrome.devtools.inspectedWindow.eval(code); diff --git a/source/src/devtools/ui-prop.vue b/source/src/devtools/ui-prop.vue index 78afc4a..b2dd6a2 100644 --- a/source/src/devtools/ui-prop.vue +++ b/source/src/devtools/ui-prop.vue @@ -1,11 +1,14 @@