diff --git a/packages/uni-migration/__tests__/demo.js b/packages/uni-migration/__tests__/demo.js
index a315ae33a0abc1c9452811aed5913a9a0e00e3f1..28d9af49069348dd1ffeedcd48d1c70edc1f8e45 100644
--- a/packages/uni-migration/__tests__/demo.js
+++ b/packages/uni-migration/__tests__/demo.js
@@ -1,13 +1,36 @@
-const migrate = require('../lib/index')
+// const migrate = require('../lib/index')
-migrate('/Users/fxy/Downloads/wa-vantui_1.1')
+// migrate('/Users/fxy/Downloads/wa-vantui_1.1')
// migrate('/Users/fxy/Downloads/wa-vantui_1.1/pages')
-// const {
-// parse
-// } = require('mustache')
-// console.log(parse("van-notice-bar__content {{ !scrollable && !wrapable ? 'van-ellipsis' : '' }}"))
+const {
+ parse
+} = require('mustache')
+
+function parseMustache(expr, identifier = false) {
+ if (!expr) {
+ return ''
+ }
+ const tokens = parse(expr)
+ const isIdentifier = tokens.length === 1
+ return tokens.map(token => {
+ if (token[0] === 'text') {
+ if (identifier) {
+ return token[1]
+ }
+ return `'${token[1]}'`
+ } else if (token[0] === '!') { // {{ !loading }}
+ return `(!${token[1]})`
+ } else if (token[0] === 'name') {
+ if (isIdentifier) {
+ return token[1]
+ }
+ return `(${token[1]})`
+ }
+ }).join('+')
+}
+console.log(parseMustache("click ",true)==='click ')
// const {
// transformTemplate
diff --git a/packages/uni-migration/__tests__/wxml.spec.js b/packages/uni-migration/__tests__/wxml.spec.js
index ed0928d2aa8ec1f83c4d5f912e963502ef209ef2..aad6f6191d5cfa4bf50790494dc90300262e8e55 100644
--- a/packages/uni-migration/__tests__/wxml.spec.js
+++ b/packages/uni-migration/__tests__/wxml.spec.js
@@ -9,11 +9,11 @@ describe('wxml:compiler', () => {
it('generate event', () => {
assertCodegen(
``,
- ``
+ ``
)
assertCodegen(
``,
- ``
+ ``
)
})
it('generate class', () => {
diff --git a/packages/uni-migration/lib/mp-weixin/transform/template-transformer/transform/traverse.js b/packages/uni-migration/lib/mp-weixin/transform/template-transformer/transform/traverse.js
index 5be4b130e7824366191684ddc1138df3993c47d1..fc1a5b0d46d1d5da5804a9174e9f5a3f4d151fe8 100644
--- a/packages/uni-migration/lib/mp-weixin/transform/template-transformer/transform/traverse.js
+++ b/packages/uni-migration/lib/mp-weixin/transform/template-transformer/transform/traverse.js
@@ -127,7 +127,7 @@ function transformFor(attribs) {
if (vKey) {
if (vKey === '*this') {
vKey = vItem
- } else if (vKey !== vItem && vKey.indexOf('.')===-1) {// wx:for-key="{{item.value}}"
+ } else if (vKey !== vItem && vKey.indexOf('.') === -1) { // wx:for-key="{{item.value}}"
vKey = vItem + '.' + vKey
}
attribs[':key'] = vKey
@@ -163,7 +163,11 @@ function transformEvent(name, value, attribs, state) {
event = transformEventName(name.replace(captureCatchRE, ''), state) + '.stop.prevent.capture'
}
if (event !== name) {
- attribs[event] = parseMustache(value, true)
+ let newValue = parseMustache(value, true)
+ if (newValue !== value) {
+ newValue = `_$self[(${newValue})||'_$noop']($event)`
+ }
+ attribs[event] = newValue
return true
}
}
diff --git a/packages/uni-mp-weixin/dist/mp.js b/packages/uni-mp-weixin/dist/mp.js
index 4bf7df6fad85196bd73b1abd26b8c9b94d172f39..fae6b1f3f85a54ac2752ed8702d3ea34bd0bcf3a 100644
--- a/packages/uni-mp-weixin/dist/mp.js
+++ b/packages/uni-mp-weixin/dist/mp.js
@@ -758,6 +758,9 @@ var polyfill = {
beforeCreate () {
// 取消 development 时的 Proxy,避免小程序组件模板中使用尚未定义的属性告警
this._renderProxy = this;
+
+ this._$self = this;
+ this._$noop = noop;
},
created () { // properties 中可能会访问 methods,故需要在 created 中初始化
initState(this);
diff --git a/src/core/runtime/mp/polyfill/index.js b/src/core/runtime/mp/polyfill/index.js
index 5296d7154441be332b746cb63025cf81296a83b0..0bda8b7a0b1853eec5de3ac68800f835f1aea3a4 100644
--- a/src/core/runtime/mp/polyfill/index.js
+++ b/src/core/runtime/mp/polyfill/index.js
@@ -1,3 +1,7 @@
+import {
+ noop
+} from 'uni-shared'
+
import {
initState
} from './state/index'
@@ -19,6 +23,9 @@ export default {
beforeCreate () {
// 取消 development 时的 Proxy,避免小程序组件模板中使用尚未定义的属性告警
this._renderProxy = this
+
+ this._$self = this
+ this._$noop = noop
},
created () { // properties 中可能会访问 methods,故需要在 created 中初始化
initState(this)