Я бы ограничил это только последней частью подстановочным знаком.Тогда 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
.И будет эффективно получить иерархию событий.После того, как остальная часть события будет передана обработчику, вы, возможно, тоже сможете делать забавные вещи ...