const {
|
ID,
|
SET_DATA,
|
GET_CHANGE_DATA
|
} = require('../util')
|
|
function isWxsChangeProp (attr) {
|
return attr.name.indexOf('change:') === 0
|
}
|
|
function createSetDataGenVar (id) {
|
return function genVar (name, value) {
|
return `${SET_DATA}(${id},'${name}',${value})`
|
}
|
}
|
|
function createGetChangeDataGenVar (id) {
|
return function genVar (name) {
|
return `${GET_CHANGE_DATA}(${id},'${name}')`
|
}
|
}
|
|
module.exports = function parseWxsProps (el, {
|
isAppService,
|
isAppView
|
}) {
|
if (!el.attrs) {
|
return
|
}
|
const wxsChangeProps = []
|
el.attrs = el.attrs.filter(attr => {
|
if (isWxsChangeProp(attr)) {
|
wxsChangeProps.push(attr.name.replace('change:', ''))
|
if (isAppService) { // service 层移除 change:prop
|
return false
|
}
|
}
|
return true
|
})
|
if (!wxsChangeProps.length) {
|
return
|
}
|
|
const genSetVar = createSetDataGenVar(el.attrsMap[ID])
|
const genGetVar = createGetChangeDataGenVar(el.attrsMap[ID])
|
|
el.attrs.forEach(attr => {
|
if (wxsChangeProps.includes(attr.name)) {
|
if (isAppService) {
|
attr.value = genSetVar('change:' + attr.value, attr.value)
|
} else if (isAppView) {
|
attr.value = genGetVar('change:' + attr.value)
|
}
|
}
|
})
|
}
|