From 25f52230da256535274e0ca02f223e1d8b1a82ab Mon Sep 17 00:00:00 2001 From: qiang Date: Wed, 19 Aug 2020 20:22:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20test=20=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F=E6=9F=A5=E8=AF=A2=20question/105048?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__tests__/compiler-extra.spec.js | 5 +++++ .../lib/script/traverse/member-expr.js | 20 ++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js index a9f33771..9b006af0 100644 --- a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js @@ -716,6 +716,11 @@ describe('mp:compiler-extra', () => { '{{$root.m1}}', 'with(this){var m0=getValue(key);var m1=m0?getValue(key):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}' ) + assertCodegen( + '{{getValue(key)}}', + '{{$root.m2}}', + 'with(this){var m0=test1(key);var m1=test2(key);var m2=m0&&m1?getValue(key):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1,m2:m2}})}' + ) assertCodegen( '{{getValue(item)}}', '{{item.m0}}', diff --git a/packages/uni-template-compiler/lib/script/traverse/member-expr.js b/packages/uni-template-compiler/lib/script/traverse/member-expr.js index f5d32f1a..fe9100ff 100644 --- a/packages/uni-template-compiler/lib/script/traverse/member-expr.js +++ b/packages/uni-template-compiler/lib/script/traverse/member-expr.js @@ -71,18 +71,14 @@ function findTest (path, state) { const property = node.property const propertyName = property.name if (objectName === VAR_ROOT || (names.includes(objectName) && (propertyName === IDENTIFIER_METHOD || propertyName === IDENTIFIER_FILTER || propertyName === IDENTIFIER_GLOBAL))) { - let property - traverse(testOrig, { - noScope: true, - Identifier (identifierPath) { - const node = identifierPath.node - if (node.name === propertyName) { - property = node - identifierPath.stop() - } - } - }) - memberExpressionPath.replaceWith(property) + const array = [] + let tempPath = memberExpressionPath + while (tempPath.parentPath) { + const key = tempPath.key + array.unshift(typeof key === 'number' ? `[${key}]` : `.${key}`) + tempPath = tempPath.parentPath + } + memberExpressionPath.replaceWith(path.parentPath.get('test' + array.join('')).node.property) } } }) -- GitLab