@antmove/wx-alipay
Version:
transform wechat miniprogram to alipay miniprogram tool.
92 lines (76 loc) • 2.39 kB
JavaScript
const utils = require('../../api/utils')
const { browserPath } = utils
const posix = browserPath()
function processRelationPath(self, relation) {
const from = self.is; let
to = relation
if (to[0] === '.') {
to = `../${to}`
}
const _p = posix.join(from, to)
return _p
}
function _relationNode(node, info) {
const { relationInfo, relation, _p } = info
// 触发父级组件的 relations
const type = relationInfo.type
let parentType = ''
if (type === 'parent') {
parentType = 'child'
} else if (type === 'ancestor') {
parentType = 'descendant'
}
const parentCtx = node.$self
const childCtx = this
if (typeof parentCtx.props.theRelations === 'object') {
Object.keys(parentCtx.props.theRelations)
.forEach((_relation) => {
const _relationInfo = parentCtx.props.theRelations[_relation]
if (_relationInfo.type === parentType) {
_relationNode.call(parentCtx, childCtx.$node, {
relationInfo: _relationInfo,
relation: _relation,
_p: processRelationPath(parentCtx, _relation),
})
return true
}
})
}
node = node.$self
this._storeRelationNodes = this._storeRelationNodes || {}
if (this._storeRelationNodes[_p]) {
this._storeRelationNodes[_p].push(node)
} else {
this._storeRelationNodes[_p] = [node]
}
if (this._storeRelationNodes[relation]) {
this._storeRelationNodes[relation].push(node)
} else {
this._storeRelationNodes[relation] = [node]
}
const ctx = this || {}
this.getRelationNodes = function(__p) {
this._storeRelationNodes = this._storeRelationNodes || {}
return this._storeRelationNodes[__p] || []
}
if (typeof relationInfo.linked === 'function') {
relationInfo.linked.call(ctx, node)
}
if (typeof relationInfo.linkChanged === 'function') {
const self = this
ctx._lifes = ctx._lifes || {}
ctx._lifes.didUpdate = ctx._lifes.didUpdate || []
ctx._lifes.didUpdate.push(() => {
relationInfo.linkChanged.call(self, node)
})
}
if (typeof relationInfo.unlinked === 'function') {
const self = this
ctx._lifes = ctx._lifes || {}
ctx._lifes.didUnmount = ctx._lifes.didUnmount || []
ctx._lifes.didUnmount.push(() => {
relationInfo.unlinked.call(self, node)
})
}
}
module.exports = _relationNode