'f'
mh-two-thousand-and-two
2024-04-12 26f2711ef9461961fb953e2b497bd314ef95e345
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import {
  hasOwn
} from 'uni-shared'
 
import {
  parseData
} from './data-parser'
 
import {
  parseProperties
} from './properties-parser'
 
import {
  parseMethods
} from './methods-parser'
 
import {
  parseLifecycle
} from './lifecycle-parser'
 
import {
  parseDefinitionFilter
} from './definition-filter-parser'
 
function parseBehavior (behavior) {
  const {
    data,
    methods,
    behaviors,
    properties
  } = behavior
 
  const vueComponentOptions = {
    watch: {},
    mpOptions: {
      mpObservers: []
    }
  }
 
  parseData(data, vueComponentOptions)
  parseMethods(methods, vueComponentOptions)
  parseBehaviors(behaviors, vueComponentOptions)
  parseProperties(properties, vueComponentOptions)
 
  parseLifecycle(behavior, vueComponentOptions)
  parseDefinitionFilter(behavior, vueComponentOptions)
 
  return vueComponentOptions
}
 
const BEHAVIORS = {
  'wx://form-field': {
    beforeCreate () {
      const mpOptions = this.$options.mpOptions
      if (!mpOptions.properties) {
        mpOptions.properties = Object.create(null)
      }
 
      const props = mpOptions.properties
      // TODO form submit,reset
      if (!hasOwn(props, 'name')) {
        props.name = {
          type: String
        }
      }
      if (!hasOwn(props, 'value')) {
        props.value = {
          type: String // 默认类型调整为 String,否则默认值为 null,导致一些自定义 input 显示不正确
        }
      }
    }
  }
}
 
export function parseBehaviors (behaviors, vueComponentOptions) {
  if (!behaviors) {
    return
  }
  behaviors.forEach(behavior => {
    if (typeof behavior === 'string') {
      BEHAVIORS[behavior] && vueComponentOptions.mixins.push(BEHAVIORS[behavior])
    } else {
      vueComponentOptions.mixins.push(parseBehavior(behavior))
    }
  })
}