diff --git a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js index b720fe7789c7512fbf28d141ca0fb6a5a5bc8d31..a5880d491b3becff413ae654658917a92c1947bd 100644 --- a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js @@ -692,5 +692,10 @@ describe('mp:compiler-extra', () => { '{{item.m0}}', 'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item?getValue(item):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}' ) + assertCodegen( + '{{getValue(item)}}', + '{{item.m0}}', + 'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item.length?getValue(item):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}' + ) }) }) 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 06e16d73a345833b9f8f3ee335cbac447fd997cc..c8a42dd7fd33b20f2af9035d28868c092a9438c9 100644 --- a/packages/uni-template-compiler/lib/script/traverse/member-expr.js +++ b/packages/uni-template-compiler/lib/script/traverse/member-expr.js @@ -45,12 +45,12 @@ function findTest (path, state) { let test = t.arrayExpression([t.clone(path.container.test)]) traverse(test, { noScope: true, - MemberExpression (path) { + MemberExpression (path_) { const names = state.scoped.map(scoped => scoped.forItem) - const node = path.node + const node = path_.node const objectName = node.object.name - if (objectName === VAR_ROOT || names.includes(objectName)) { - path.replaceWith(node.property) + if (objectName === VAR_ROOT || (names.includes(objectName) && path.scope.hasOwnBinding(node.property.name))) { + path_.replaceWith(node.property) } } })