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)
}
}
})