docs(lib): add `lib.announce` docs.

This commit is contained in:
Ansolve 2023-11-16 18:15:54 +08:00
parent 933a91f9d0
commit c6c077b011
No known key found for this signature in database
GPG Key ID: 2F2873AC9538CC2D
1 changed files with 48 additions and 3 deletions

View File

@ -355,7 +355,29 @@
}], }],
}, },
/** /**
* **无名杀消息推送库**
* *
* 通过`EventTarget`机制实现消息推送和接收的解耦
* 从而使消息接收方无需依赖发布方发布方也无需考虑接收方
*
* > `lib.announce`不是`actor`模型若不存在订阅者则消息发送将无意义
*
* @example
* // 甲扩展(如《千幻聆音》)在角色皮肤切换后,调用:
* lib.announce.publish("skinChange", {
* player,
* playerName: "zhangfei",
* originSkin: "image/xxx.jpg",
* currentSkin: "image/yyy.jpg"
* });
*
* // 乙扩展监听此`skinChange`事件,并修改自己扩展相关界面的图片:
* const method = lib.announce.subscribe("skinChange", (e) => {
* div.setBackgroundImage(e.currentSkin);
* });
*
* // 若此时乙扩展不想继续订阅`skinChange`事件,可以通过`unsubscribe`解除订阅
* lib.announce.unsubscribe("skinChange", method);
*/ */
announce:new class{ announce:new class{
constructor(){ constructor(){
@ -370,7 +392,14 @@
} }
/** /**
* 推送一个对象给所有监听了name的订阅者 * 推送任意数据给所有监听了指定事件的订阅者并返回给定的数据
*
* 若不存在订阅指定事件的订阅者则推送的数据将无意义
*
* @template T
* @param {string} name - 要推送事件的名称
* @param {T} values - 要推送的数据
* @returns {T}
*/ */
publish(name,values){ publish(name,values){
if(this._announce) this._announce.dispatchEvent(new CustomEvent(name,{ if(this._announce) this._announce.dispatchEvent(new CustomEvent(name,{
@ -380,7 +409,16 @@
} }
/** /**
* 订阅name相关的事件 * 订阅给定名字的事件并返回给定的函数
*
* 在事件触发时执行给定的函数
*
* 给定的函数将被存储至当前实例中用于取消订阅时获取
*
* @template T
* @param {string} name - 要订阅事件的名称
* @param {(values: T) => void} method - 事件触发时执行的函数
* @returns {(values: T) => void}
*/ */
subscribe(name,method){ subscribe(name,method){
if(this._announce&&this._announce_cache) { if(this._announce&&this._announce_cache) {
@ -403,7 +441,14 @@
} }
/** /**
* 取消对事件name的订阅 * 取消指定事件某一函数的订阅并返回该函数
*
* 给定的函数将不再于事件触发时执行其余同事件需触发的函数不受限制
*
* @template T
* @param {string} name - 要取消订阅事件的名称
* @param {(values: T) => void} method - 订阅指定事件的函数
* @returns {(values: T) => void}
*/ */
unsubscribe(name,method){ unsubscribe(name,method){
if(this._announce&&this._announce_cache&&this._announce_cache.has(method)){ if(this._announce&&this._announce_cache&&this._announce_cache.has(method)){