智能照明系统APP-本地串口
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.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/fb/fb0d52c55c98009c283b3976ac4...

92 lines
2.0 KiB

import {
VD_SYNC,
UI_EVENT
} from '../../../constants'
import {
generateId
} from '../../../helpers/util'
function findParent (vm) {
let parent = vm.$parent
while (parent) {
if (parent._$id) {
return parent
}
parent = parent.$parent
}
}
export class VDomSync {
constructor (pageId, options = {}) {
this.pageId = pageId
this.addBatchVData = Object.create(null)
this.updateBatchVData = []
this.vms = Object.create(null)
this.version = options.version
}
addVData (cid, data = {}, options = {}) {
this.addBatchVData[cid] = [data, options]
}
updateVData (cid, data = {}) {
this.updateBatchVData.push([cid, data])
}
initVm (vm) {
vm._$id = generateId(vm, findParent(vm), this.version)
let vData = this.addBatchVData[vm._$id]
if (!vData) {
console.error('cid unmatched', vm)
vData = {
data: {},
options: {}
}
} else {
delete this.addBatchVData[vm._$id]
}
const [data, options] = vData
Object.assign(vm.$options, options)
vm.$r = data || Object.create(null)
this.vms[vm._$id] = vm
}
sendUIEvent (cid, nid, event) {
UniViewJSBridge.publishHandler(VD_SYNC, {
data: [
[UI_EVENT, [
[cid, nid, event]
]]
],
options: {
timestamp: Date.now()
}
})
}
clearAddBatchVData () {
if (process.env.NODE_ENV !== 'production') {
if (Object.keys(this.addBatchVData).length) {
console.error('this.addBatchVData...=' + JSON.stringify(this.addBatchVData))
}
}
this.addBatchVData = Object.create(null)
}
flush () {
this.updateBatchVData.forEach(([cid, data]) => {
const vm = this.vms[cid]
if (!vm) {
return console.error(`Not found ${cid}`)
}
Object.keys(data).forEach(cid => {
Object.assign((vm.$r[cid] || (vm.$r[cid] = Object.create(null))), data[cid])
})
vm.$forceUpdate()
})
this.updateBatchVData.length = 0
}
}