tt-mp
Version:
一套组件化、可复用、易扩展的头条小程序 UI 组件库
59 lines (53 loc) • 1.51 kB
JavaScript
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
),
})
},
})
},
})
}