@antmove/wx-alipay
Version:
transform wechat miniprogram to alipay miniprogram tool.
97 lines (87 loc) • 1.89 kB
JavaScript
const equals = function(x, y) {
if (x === y) {
return true
}
if (!(x instanceof Object) || !(y instanceof Object)) {
return false
}
if (x.constructor !== y.constructor) {
return false
}
for (const p in x) {
if (x.hasOwnProperty(p)) {
if (!y.hasOwnProperty(p)) {
return false
}
if (x[p] === y[p]) {
continue
}
if (typeof x[p] !== 'object') {
return false
}
if (!equals(x[p], y[p])) {
return false
}
}
}
for (const p in y) {
if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
return false
}
}
return true
}
function observerHandle(observerObj, args, that) {
Object.keys(observerObj).forEach((obs) => {
if (typeof observerObj[obs] === 'function') {
let props
if (args.props) {
props = args.props
}
if (args[0]) {
props = args[0]
}
if (!props) {
return
}
if (!equals(props[obs], that.props[obs])) {
observerObj[obs].call(that, that.props[obs], props[obs])
}
}
})
}
function observersHandle(observersObj, args, that) {
let preData = null
if (Array.isArray(args)) {
preData = args[1]
} else {
preData = args.props
}
Object.keys(observersObj).forEach((obs) => {
let left = {}
let right = {}
if (obs.match(/\./)) {
const _dataArr = obs.split('.')
left = processChildAttr(preData, _dataArr)
right = processChildAttr(that.data, _dataArr)
} else {
left = preData[obs]
right = that.data[obs]
}
const dif = equals(left, right)
if (!dif) {
observersObj[obs].fn.call(that, ...observersObj[obs].arr)
}
})
}
function processChildAttr(attr, arr) {
let _ = attr
arr.forEach((name) => {
_ = _[name]
})
return _
}
module.exports = {
observerHandle,
observersHandle,
}