我正在为自定义事件创建一个发布/订阅对象,但我不知道如何添加对 user.logged.*
等事件的支持,以便订阅者订阅事件 user.logged.in
和 user.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'
然后,您可以注册事件 user
、user.logged
和 user.logged.in
。并且将有效地获得事件层次结构。将事件的其余部分传递给处理程序,您也许也可以做一些有趣的事情......
关于带有通配符 (*) 的 Javascript 自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829209/