UNPKG

tt-mp

Version:

一套组件化、可复用、易扩展的头条小程序 UI 组件库

59 lines (53 loc) 1.51 kB
const defaultEvents = { onChange() {}, } export default function eventsMixin(params = { defaultEvents }) { return Behavior({ lifetimes: { created() { this._oriTriggerEvent = this.triggerEvent this.triggerEvent = this._triggerEvent }, }, properties: { events: { type: Object, value: defaultEvents, }, }, data: { inputEvents: defaultEvents, }, definitionFilter(defFields) { // set default data Object.assign((defFields.data = defFields.data || {}), { inputEvents: Object.assign({}, defaultEvents, defFields.inputEvents), }) // set default methods Object.assign((defFields.methods = defFields.methods || {}), { _triggerEvent(name, params, runCallbacks = true, option) { const { inputEvents } = this.data const method = `on${name[0].toUpperCase()}${name.slice(1)}` const func = inputEvents[method] if (runCallbacks && typeof func === 'function') { func.call(this, params) } this._oriTriggerEvent(name, params, option) }, }) // set default observers Object.assign((defFields.observers = defFields.observers || {}), { events(newVal) { this.setData({ inputEvents: Object.assign( {}, defaultEvents, this.data.inputEvents, newVal ), }) }, }) }, }) }