数据监听器

监听数据的变更

介绍#

mk.monitor 是一个类似事件接口的数据监听工具,可以监听对象内指定属性的赋值操作,可用于 MVVM 实现、游戏调试使用

方法#

on#

监听对象属性的数据变更

示例#

let data = {
    test: 0,
};

mk.monitor.on(
    data,
    'test',
    (newValue, oldValue) => {
        // 数据修改回调
        console.log('新值:', newValue, '旧值:', oldValue);
    },
    () => {
        // 取消监听回调
    },
    this
);

其中 取消监听回调 可以不传递,如下

mk.monitor.on(data, "test", ()=> { }, this)


onRecursion#

和 on 的功能一致,区别是会递归监听对象中的每个属性


once#

和 on 的功能一致,区别是只会触发一次


off#

取消监听的事件

示例#

mk.monitor.off(data, 'test', this);
// 数据修改回调为 on 函数第三个参数
mk.monitor.off(data, 'test', 数据修改回调, this);

offRecursion#

和 off 的功能一致,区别是会递归取消监听对象中的每个属性


clear#

清理目标所关联的所有数据监听事件,目标对象为 on, once, onRecursion 的最后一个参数

示例#

mk.monitor.clear(this);

sync#

同步两个对象的数据

示例#

let data = {
    test: 0,
};

let data2 = {
    test2: 0,
};

// 当 data.test 变更时,数据会同步到 data2.test2
mk.monitor.sync(data, 'test', data2, 'test2', this);

wait#

等待监听回调执行完成

如果之前监听了对象属性,你又需要确保监听的回调函数已经执行完成则可以使用 wait

示例#

data.test = 1;
await mk.monitor.wait(data, 'test');

disable#

禁用 on 事件回调,执行后即使你监听了对象的修改,也不会执行回调。注意这不是删除事件回调而是禁用

示例#

mk.monitor.disable(this);
mk.monitor.disable(data, 'test', this);
mk.monitor.disable(data, 'test', 监听函数回调, this);

enable#

启用 on 事件回调,恢复 disable 禁用的事件

示例#

mk.monitor.enable(this);
mk.monitor.enable(data, 'test', this);
mk.monitor.enable(data, 'test', 监听函数回调, this);