diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js index 9e05a96a027a63390c930d1eac2af6c34e1a04ab..4d719a64ee2afe35ca461e177d50f4e64d5a6eb6 100644 --- a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js @@ -23,8 +23,8 @@ describe('mp:compiler-mp-baidu', () => { }) it('generate v-for directive', () => { assertCodegen( - '', - '' + '', + '' ) }) it('generate scoped slot', () => { @@ -125,15 +125,15 @@ describe('mp:compiler-mp-baidu', () => { ) assertCodegen( '', - '' + '' ) assertCodegen( '', - '' + '' ) assertCodegen( '', - '' + '' ) }) diff --git a/packages/uni-template-compiler/lib/template/traverse.js b/packages/uni-template-compiler/lib/template/traverse.js index 7303c990cc2312f033ca7f07da18310ce9088715..fbe27a80601cb46f70747e610292d30f794b282a 100644 --- a/packages/uni-template-compiler/lib/template/traverse.js +++ b/packages/uni-template-compiler/lib/template/traverse.js @@ -428,8 +428,15 @@ function traverseRenderList (callExprNode, state) { const prefix = state.options.platform.directive + const isBaidu = state.options.platform.name === 'mp-baidu' + let forValue = genCode(callExprNode.arguments[0], isBaidu) + + if(isBaidu && forKey) { + forValue += ` trackBy ${getForKey(forKey, forIndex, state)}` + } + const attr = { - [prefix + 'for']: genCode(callExprNode.arguments[0]), + [prefix + 'for']: forValue, [prefix + 'for-item']: forItem } @@ -437,7 +444,7 @@ function traverseRenderList (callExprNode, state) { attr[prefix + 'for-index'] = forIndex } - if (forKey) { + if (forKey && !isBaidu) { const key = getForKey(forKey, forIndex, state) if (key) { attr[prefix + 'key'] = key diff --git a/packages/uni-template-compiler/lib/util.js b/packages/uni-template-compiler/lib/util.js index 505ed618391c6973d400fe7239ca34ab6e07e39e..99a3103c1db379a37d4a478d3a3018559eb98d6d 100644 --- a/packages/uni-template-compiler/lib/util.js +++ b/packages/uni-template-compiler/lib/util.js @@ -107,6 +107,7 @@ function getForKey (forKey, forIndex, state) { if (forKey) { if (t.isIdentifier(forKey)) { if (forIndex !== forKey.name) { // 非 forIndex + if (state.options.platform.name === 'mp-baidu') return getCode(forKey) return '*this' } else { // TODO @@ -114,6 +115,7 @@ function getForKey (forKey, forIndex, state) { return forKey.name } } else if (t.isMemberExpression(forKey)) { + if (state.options.platform.name === 'mp-baidu') return getCode(forKey) return forKey.property.name || forKey.property.value } else { state.tips.add(uniI18n.__('templateCompiler.noH5KeyNoSupportExpression', { 0: getCode(forKey), 1: 'https://uniapp.dcloud.io/use?id=key' }))