You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
98 lines
2.5 KiB
3 years ago
|
/**
|
||
|
* 过滤对象的函数属性
|
||
|
* @param {Object} opts
|
||
|
*/
|
||
|
const mergeOptionsToData = (opts = {}) => {
|
||
|
const options = Object.assign({}, opts)
|
||
|
|
||
|
for (const key in options) {
|
||
|
if (options.hasOwnProperty(key) && typeof options[key] === 'function') {
|
||
|
delete options[key]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return options
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Simple bind, faster than native
|
||
|
*
|
||
|
* @param {Function} fn
|
||
|
* @param {Object} ctx
|
||
|
* @return {Function}
|
||
|
*/
|
||
|
const bind = (fn, ctx) => {
|
||
|
return (...args) => {
|
||
|
return args.length ? fn.apply(ctx, args) : fn.call(ctx)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Object assign
|
||
|
*/
|
||
|
const assign = (...args) => Object.assign({}, ...args)
|
||
|
|
||
|
export default Behavior({
|
||
|
definitionFilter(defFields) {
|
||
|
defFields.data = mergeOptionsToData(defFields.data)
|
||
|
defFields.data.in = false
|
||
|
defFields.data.visible = false
|
||
|
},
|
||
|
methods: {
|
||
|
/**
|
||
|
* 过滤对象的函数属性
|
||
|
* @param {Object} opts
|
||
|
*/
|
||
|
$$mergeOptionsToData: mergeOptionsToData,
|
||
|
/**
|
||
|
* 合并参数并绑定方法
|
||
|
*
|
||
|
* @param {Object} opts 参数对象
|
||
|
* @param {Object} fns 方法挂载的属性
|
||
|
*/
|
||
|
$$mergeOptionsAndBindMethods (opts = {}, fns = this.fns) {
|
||
|
const options = Object.assign({}, opts)
|
||
|
|
||
|
for (const key in options) {
|
||
|
if (options.hasOwnProperty(key) && typeof options[key] === 'function') {
|
||
|
fns[key] = bind(options[key], this)
|
||
|
delete options[key]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return options
|
||
|
},
|
||
|
/**
|
||
|
* Promise setData
|
||
|
* @param {Array} args 参数对象
|
||
|
*/
|
||
|
$$setData (...args) {
|
||
|
const params = assign({}, ...args)
|
||
|
|
||
|
return new Promise((resolve) => {
|
||
|
this.setData(params, resolve)
|
||
|
})
|
||
|
},
|
||
|
/**
|
||
|
* 延迟指定时间执行回调函数
|
||
|
* @param {Function} callback 回调函数
|
||
|
* @param {Number} timeout 延迟时间
|
||
|
*/
|
||
|
$$requestAnimationFrame (callback = () => {}, timeout = 1000 / 60) {
|
||
|
return new Promise((resolve) => setTimeout(resolve, timeout)).then(callback)
|
||
|
},
|
||
|
},
|
||
|
/**
|
||
|
* 组件生命周期函数,在组件实例进入页面节点树时执行
|
||
|
*/
|
||
|
created () {
|
||
|
this.fns = {}
|
||
|
},
|
||
|
/**
|
||
|
* 组件生命周期函数,在组件实例被从页面节点树移除时执行
|
||
|
*/
|
||
|
detached () {
|
||
|
this.fns = {}
|
||
|
},
|
||
|
})
|