带有通配符 (*) 的 Javascript 自定义事件

标签 javascript publish-subscribe observer-pattern

我正在为自定义事件创建一个发布/订阅对象,但我不知道如何添加对 user.logged.* 等事件的支持,以便订阅者订阅事件 user.logged.inuser.logged.out

是否有任何资源导致 Google 无法提供帮助。

编辑

也许在我的订阅函数中,我应该检查传递的事件类型中的通配符并订阅这两个事件?

最佳答案

我会将其限制为仅最后一部分为通配符。然后,trigger 看起来像

function trigger(name, data) {
    var parts = name.split('.');
    for(var i = 0; i < parts.length; i++) {
        call_subscribers(parts.slice(0, i).join('.'), data, parts.slice(i+1));
    }
}

function call_subscribers(event_name, data, remaining_event_parts) {
    for(var subscriberIndex in subscribers[event_name]) {
        subscribers[subscriberIndex](data, remaining_event_parts);
    }
}

在这个例子中,你会这样做

subscribers = [];
subscribers['user.logged'] = [
    function(data) { // here, we dont care about the remaining parts
        // do what you have to do
    }
];
trigger('user.logged.in'); // calls 'user', 
                          //'user.logged' (the wildcard we want) and 
                          // 'user.logged.in'

然后,您可以注册事件 useruser.loggeduser.logged.in。并且将有效地获得事件层次结构。将事件的其余部分传递给处理程序,您也许也可以做一些有趣的事情......

关于带有通配符 (*) 的 Javascript 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829209/

相关文章:

javascript - 使用addEventListener来替换每个onClick

c# - 正则表达式将数字提取到组中

javascript - SVG 将圆形转换为简单的直线

publish-subscribe - 创建对 URL 端点的订阅时 "pubsub error INVALID_ARGUMENT"

design-patterns - 观察者模式 - 何时

javascript - fusion-tables,需要帮助从表中获取最新数据并将其插入 map 代码中

python - 数据获取检查PUB/SUB模式

google-cloud-platform - Google Cloud Pub-Sub 的 Avro 消息?

java - 监视对集合的更改

java - 使用 Java 中的观察者了解 MVC