@mpxjs/core 2.8.56 → 2.8.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpxjs/core",
3
- "version": "2.8.56",
3
+ "version": "2.8.60",
4
4
  "description": "mpx runtime core",
5
5
  "keywords": [
6
6
  "miniprogram",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "main": "src/index.js",
21
21
  "dependencies": {
22
- "@mpxjs/utils": "^2.8.52",
22
+ "@mpxjs/utils": "^2.8.60",
23
23
  "lodash": "^4.1.1",
24
24
  "miniprogram-api-typings": "^3.10.0"
25
25
  },
@@ -47,5 +47,5 @@
47
47
  "url": "https://github.com/didi/mpx/issues"
48
48
  },
49
49
  "sideEffects": false,
50
- "gitHead": "391feabc6246acfa17271aa632adf5da2c308a05"
50
+ "gitHead": "02a77bf602744c35703b2fdc27171edbec09edcb"
51
51
  }
package/src/core/proxy.js CHANGED
@@ -311,7 +311,16 @@ export default class MpxProxy {
311
311
  watch (source, cb, options) {
312
312
  const target = this.target
313
313
  const getter = isString(source)
314
- ? () => getByPath(target, source)
314
+ ? () => {
315
+ // for watch multi path string like 'a.b,c,d'
316
+ if (source.indexOf(',') > -1) {
317
+ return source.split(',').map(path => {
318
+ return getByPath(target, path.trim())
319
+ })
320
+ } else {
321
+ return getByPath(target, source)
322
+ }
323
+ }
315
324
  : source.bind(target)
316
325
 
317
326
  if (isObject(cb)) {
@@ -529,6 +538,9 @@ export default class MpxProxy {
529
538
  initRender () {
530
539
  if (this.options.__nativeRender__) return this.doRender()
531
540
 
541
+ const _i = this.target._i.bind(this.target)
542
+ const _c = this.target._c.bind(this.target)
543
+ const _r = this.target._r.bind(this.target)
532
544
  const effect = this.effect = new ReactiveEffect(() => {
533
545
  // pre render for props update
534
546
  if (this.propsUpdatedFlag) {
@@ -537,7 +549,7 @@ export default class MpxProxy {
537
549
 
538
550
  if (this.target.__injectedRender) {
539
551
  try {
540
- return this.target.__injectedRender()
552
+ return this.target.__injectedRender(_i, _c, _r)
541
553
  } catch (e) {
542
554
  warn('Failed to execute render function, degrade to full-set-data mode.', this.options.mpxFileResource, e)
543
555
  this.render()
@@ -1,4 +1,4 @@
1
- import { setByPath, error, hasOwn } from '@mpxjs/utils'
1
+ import { setByPath, error, hasOwn, dash2hump } from '@mpxjs/utils'
2
2
  import Mpx from '../../index'
3
3
 
4
4
  const datasetReg = /^data-(.+)$/
@@ -36,6 +36,8 @@ export default function proxyEventMixin () {
36
36
  if (type === 'begin' || type === 'end') {
37
37
  // 地图的 regionchange 事件会派发 e.type 为 begin 和 end 的事件
38
38
  fallbackType = 'regionchange'
39
+ } else if (/-([a-z])/.test(type)) {
40
+ fallbackType = dash2hump(type)
39
41
  } else if (__mpx_mode__ === 'ali') {
40
42
  fallbackType = type.replace(/^./, i => i.toLowerCase())
41
43
  }
@@ -89,34 +91,22 @@ export default function proxyEventMixin () {
89
91
  }
90
92
  if (__mpx_mode__ === 'ali') {
91
93
  Object.assign(methods, {
92
- triggerEvent (eventName, eventDetail, e) {
94
+ triggerEvent (eventName, eventDetail) {
93
95
  const handlerName = eventName.replace(/^./, matched => matched.toUpperCase()).replace(/-([a-z])/g, (match, p1) => p1.toUpperCase())
94
96
  const handler = this.props && (this.props['on' + handlerName] || this.props['catch' + handlerName])
95
97
  if (handler && typeof handler === 'function') {
96
- let eventObj = {}
97
- if (e) {
98
- e.detail = Object.assign(e.detail, eventDetail)
99
- eventObj = e
100
- } else {
101
- const dataset = collectDataset(this.props)
102
- const id = this.props.id || ''
103
- const timeStamp = +new Date()
104
- eventObj = {
105
- type: eventName,
106
- timeStamp,
107
- target: { id, dataset, targetDataset: dataset },
108
- currentTarget: { id, dataset },
109
- detail: eventDetail
110
- }
98
+ const dataset = collectDataset(this.props)
99
+ const id = this.props.id || ''
100
+ const timeStamp = +new Date()
101
+ const eventObj = {
102
+ type: eventName,
103
+ timeStamp,
104
+ target: { id, dataset, targetDataset: dataset },
105
+ currentTarget: { id, dataset },
106
+ detail: eventDetail
111
107
  }
112
108
  handler.call(this, eventObj)
113
109
  }
114
- },
115
- __proxyEvent (e) {
116
- const eventName = e.type
117
- // 保持和微信一致
118
- e.target = e.currentTarget
119
- this.triggerEvent(eventName, {}, e)
120
110
  }
121
111
  })
122
112
  }
@@ -18,12 +18,6 @@ export default function proxyEventMixin () {
18
18
  const originValue = valuePath.reduce((acc, cur) => acc[cur], $event.detail)
19
19
  const value = filterMethod ? (innerFilter[filterMethod] ? innerFilter[filterMethod](originValue) : typeof this[filterMethod] === 'function' && this[filterMethod]) : originValue
20
20
  setByPath(this, expr, value)
21
- },
22
- __proxyEvent (e) {
23
- const type = e.type
24
- // 保持和微信一致 target 和 currentTarget 相同
25
- e.target = e.currentTarget
26
- this.triggerEvent(type, {}, e)
27
21
  }
28
22
  }
29
23
  }
@@ -1,4 +1,4 @@
1
- import { isObject } from '@mpxjs/utils'
1
+ import { isObject, getByPath, hasOwn } from '@mpxjs/utils'
2
2
 
3
3
  export default function renderHelperMixin () {
4
4
  return {
@@ -22,6 +22,12 @@ export default function renderHelperMixin () {
22
22
  }
23
23
  },
24
24
  _c (key, value) {
25
+ if (hasOwn(this.__mpxProxy.renderData, key)) {
26
+ return this.__mpxProxy.renderData[key]
27
+ }
28
+ if (value === undefined) {
29
+ value = getByPath(this, key)
30
+ }
25
31
  this.__mpxProxy.renderData[key] = value
26
32
  return value
27
33
  },
@@ -1,7 +1,7 @@
1
1
  import MpxProxy from '../../../core/proxy'
2
2
  import builtInKeysMap from '../builtInKeysMap'
3
3
  import mergeOptions from '../../../core/mergeOptions'
4
- import { isFunction, error, diffAndCloneA, hasOwn } from '@mpxjs/utils'
4
+ import { isFunction, error, diffAndCloneA, hasOwn, noop } from '@mpxjs/utils'
5
5
 
6
6
  function transformApiForProxy (context, currentInject) {
7
7
  const rawSetData = context.setData.bind(context)
@@ -45,16 +45,14 @@ function transformApiForProxy (context, currentInject) {
45
45
  }
46
46
  })
47
47
  if (currentInject) {
48
- if (currentInject.render) {
49
- Object.defineProperties(context, {
50
- __injectedRender: {
51
- get () {
52
- return currentInject.render.bind(context)
53
- },
54
- configurable: false
55
- }
56
- })
57
- }
48
+ Object.defineProperties(context, {
49
+ __injectedRender: {
50
+ get () {
51
+ return currentInject.render || noop
52
+ },
53
+ configurable: false
54
+ }
55
+ })
58
56
  if (currentInject.getRefsData) {
59
57
  Object.defineProperties(context, {
60
58
  __getRefsData: {
@@ -1,4 +1,4 @@
1
- import { hasOwn } from '@mpxjs/utils'
1
+ import { hasOwn, noop } from '@mpxjs/utils'
2
2
  import MpxProxy from '../../../core/proxy'
3
3
  import builtInKeysMap from '../builtInKeysMap'
4
4
  import mergeOptions from '../../../core/mergeOptions'
@@ -83,16 +83,14 @@ function transformApiForProxy (context, currentInject) {
83
83
 
84
84
  // 绑定注入的render
85
85
  if (currentInject) {
86
- if (currentInject.render) {
87
- Object.defineProperties(context, {
88
- __injectedRender: {
89
- get () {
90
- return currentInject.render
91
- },
92
- configurable: false
93
- }
94
- })
95
- }
86
+ Object.defineProperties(context, {
87
+ __injectedRender: {
88
+ get () {
89
+ return currentInject.render || noop
90
+ },
91
+ configurable: false
92
+ }
93
+ })
96
94
  if (currentInject.getRefsData) {
97
95
  Object.defineProperties(context, {
98
96
  __getRefsData: {
package/src/vuePlugin.js CHANGED
@@ -16,22 +16,17 @@ function collectDataset (attrs) {
16
16
  }
17
17
 
18
18
  export default function install (Vue) {
19
- Vue.prototype.triggerEvent = function (eventName, eventDetail, e) {
19
+ Vue.prototype.triggerEvent = function (eventName, eventDetail) {
20
20
  let eventObj = {}
21
- if (e) {
22
- e.detail = Object.assign(e.detail, eventDetail)
23
- eventObj = e
24
- } else {
25
- const dataset = collectDataset(this.$attrs)
26
- const id = this.$attrs.id || ''
27
- const timeStamp = +new Date()
28
- eventObj = {
29
- type: eventName,
30
- timeStamp,
31
- target: { id, dataset, targetDataset: dataset },
32
- currentTarget: { id, dataset },
33
- detail: eventDetail
34
- }
21
+ const dataset = collectDataset(this.$attrs)
22
+ const id = this.$attrs.id || ''
23
+ const timeStamp = +new Date()
24
+ eventObj = {
25
+ type: eventName,
26
+ timeStamp,
27
+ target: { id, dataset, targetDataset: dataset },
28
+ currentTarget: { id, dataset },
29
+ detail: eventDetail
35
30
  }
36
31
  return this.$emit(eventName, eventObj)
37
32
  }