解决事件泄漏问题
This commit is contained in:
@@ -140,10 +140,10 @@ class EventBusManager {
|
||||
{ name: 'tabpage', handler: tabPageHandler, events: TABPAGE_EVENT_TYPES },
|
||||
{ name: 'area', handler: areaHandler, events: AREA_EVENT_TYPES },
|
||||
{ name: 'global', handler: globalEventManager, events: GLOBAL_EVENT_TYPES },
|
||||
{ name: 'drag', handler: dragStateManager, events: DRAG_STATE_TYPES }
|
||||
{ name: 'drag', handler: dragStateManager.getInstance(), events: DRAG_STATE_TYPES, skipEventRegistration: true }
|
||||
];
|
||||
|
||||
for (const { name, handler, events } of handlers) {
|
||||
for (const { name, handler, events, skipEventRegistration = false } of handlers) {
|
||||
const handlerConfig = this.config.handlers[name];
|
||||
|
||||
if (!handlerConfig?.enabled) {
|
||||
@@ -154,15 +154,20 @@ class EventBusManager {
|
||||
try {
|
||||
console.log(`📝 注册事件处理器: ${name}`);
|
||||
|
||||
// 注册事件处理器到事件总线
|
||||
Object.values(events).forEach(eventType => {
|
||||
if (typeof handler.handleEvent === 'function') {
|
||||
eventBus.on(eventType, handler.handleEvent.bind(handler), {
|
||||
priority: 1,
|
||||
id: `handler-${name}`
|
||||
});
|
||||
}
|
||||
});
|
||||
// 注册事件处理器到事件总线(除非跳过)
|
||||
if (!skipEventRegistration) {
|
||||
Object.values(events).forEach(eventType => {
|
||||
if (typeof handler.handleEvent === 'function') {
|
||||
eventBus.on(eventType, handler.handleEvent.bind(handler), {
|
||||
priority: 1,
|
||||
id: `handler-${name}`,
|
||||
componentId: `handler-${name}`
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log(`⏭️ 跳过事件监听器注册(内部自动注册): ${name}`);
|
||||
}
|
||||
|
||||
// 调用初始化方法(如果存在)
|
||||
if (typeof handler.initialize === 'function') {
|
||||
@@ -236,7 +241,7 @@ class EventBusManager {
|
||||
routeTime: Date.now()
|
||||
});
|
||||
});
|
||||
}, { id: 'router', priority: 0 });
|
||||
}, { id: 'router', priority: 0, componentId: 'event-router' });
|
||||
});
|
||||
|
||||
console.log(`🔗 设置了 ${routes.length} 个事件路由`);
|
||||
|
||||
Reference in New Issue
Block a user