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)) } }) }