parent
273b40f1a0
commit
5dcfad2d72
@ -0,0 +1,46 @@
|
|||||||
|
function Mediator(obj) {
|
||||||
|
const channels = {}
|
||||||
|
|
||||||
|
const mediator = {
|
||||||
|
subscribe: function (channel, cb) {
|
||||||
|
if (!channels[channel]) {
|
||||||
|
channels[channel] = []
|
||||||
|
}
|
||||||
|
channels[channel].push(cb)
|
||||||
|
return this.unsubscribe.bind(null, channel, cb)
|
||||||
|
},
|
||||||
|
|
||||||
|
unsubscribe: function (channel, cb) {
|
||||||
|
let rs = channels[channel]
|
||||||
|
let index = -1
|
||||||
|
if (rs) {
|
||||||
|
for (let i = 0; i < rs.length; i++) {
|
||||||
|
if (rs[i].name === cb.name) {
|
||||||
|
index = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (index >= 0) {
|
||||||
|
channels[channel].splice(index, 1)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
|
||||||
|
publish: function (channel) {
|
||||||
|
if (!channels[channel]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const args = Array.prototype.slice.call(arguments, 1)
|
||||||
|
channels[channel].forEach(subscription => {
|
||||||
|
subscription.apply(null, args)
|
||||||
|
})
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj ? Object.assign(obj, mediator) : mediator
|
||||||
|
}
|
||||||
|
const mediator = new Mediator()
|
||||||
|
export default mediator
|
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.9 KiB |
Loading…
Reference in new issue