diff --git a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
index dc0947f3efdefe0117852c3844cf4f3b8c3faeb7..dfbb7be2c2c3135f4d5ae29a7f1721bdb06af65f 100644
--- a/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-extra.spec.js
@@ -722,5 +722,10 @@ describe('mp:compiler-extra', () => {
'{{item.m2}}',
'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=test(item.id);var m1=m0?test(item.type):null;var m2=m0&&m1?test("item"):null;return{$orig:$orig,m0:m0,m1:m1,m2:m2}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
)
+ assertCodegen(
+ '{{test(item.list)}}',
+ '{{item.m0}}',
+ 'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var g0=Object.values(item.list);var m0=g0.length?test(item.list):null;return{$orig:$orig,g0:g0,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 3a59a6d84b9c3782fd37b67e0fa18b6bf4ff1bb3..70aba6c2346f0a479ece2f21105d2a44190c4e7d 100644
--- a/packages/uni-template-compiler/lib/script/traverse/member-expr.js
+++ b/packages/uni-template-compiler/lib/script/traverse/member-expr.js
@@ -4,7 +4,8 @@ const traverse = require('@babel/traverse').default
const {
VAR_ROOT,
IDENTIFIER_METHOD,
- IDENTIFIER_FILTER
+ IDENTIFIER_FILTER,
+ IDENTIFIER_GLOBAL
} = require('../../constants')
function isMatch (name, forItem, forIndex) {
@@ -69,7 +70,7 @@ function findTest (path, state) {
const objectName = node.object.name
const property = node.property
const propertyName = property.name
- if (objectName === VAR_ROOT || (names.includes(objectName) && (propertyName === IDENTIFIER_METHOD || propertyName === IDENTIFIER_FILTER))) {
+ if (objectName === VAR_ROOT || (names.includes(objectName) && (propertyName === IDENTIFIER_METHOD || propertyName === IDENTIFIER_FILTER || propertyName === IDENTIFIER_GLOBAL))) {
let property
traverse(testOrig, {
noScope: true,