Skip to content

Commit

Permalink
refactor: optimize event-dispatcher
Browse files Browse the repository at this point in the history
  • Loading branch information
xile611 committed Aug 8, 2024
1 parent 5a9e291 commit fb2e4f7
Showing 1 changed file with 27 additions and 38 deletions.
65 changes: 27 additions & 38 deletions packages/vchart/src/event/event-dispatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,21 +150,18 @@ export class EventDispatcher implements IEventDispatcher {
const handlers = bubble.getHandlers(level);
stopBubble = this._invoke(handlers, eType, params);
} else {
// Mark 级别的事件只包含对语法层代理的基础事件
const handlers = bubble.getHandlers(Event_Bubble_Level.mark);
stopBubble = this._invoke(handlers, eType, params);
const levels = [
Event_Bubble_Level.mark,
Event_Bubble_Level.model,
Event_Bubble_Level.chart,
Event_Bubble_Level.vchart
];
let i = 0;

if (!stopBubble) {
const handlers = bubble.getHandlers(Event_Bubble_Level.model);
stopBubble = this._invoke(handlers, eType, params);
}
if (!stopBubble) {
const handlers = bubble.getHandlers(Event_Bubble_Level.chart);
stopBubble = this._invoke(handlers, eType, params);
}
if (!stopBubble) {
const handlers = bubble.getHandlers(Event_Bubble_Level.vchart);
stopBubble = this._invoke(handlers, eType, params);
// Mark 级别的事件只包含对语法层代理的基础事件
while (!stopBubble && i < levels.length) {
stopBubble = this._invoke(bubble.getHandlers(levels[i]), eType, params);
i++;
}
}

Expand Down Expand Up @@ -198,30 +195,22 @@ export class EventDispatcher implements IEventDispatcher {
}

clear(): void {
for (const entry of this._viewListeners.entries()) {
this._compiler.removeEventListener(Event_Source_Type.chart, entry[0], entry[1]);
}
this._viewListeners.clear();
for (const entry of this._windowListeners.entries()) {
this._compiler.removeEventListener(Event_Source_Type.window, entry[0], entry[1]);
}
this._windowListeners.clear();
for (const entry of this._canvasListeners.entries()) {
this._compiler.removeEventListener(Event_Source_Type.canvas, entry[0], entry[1]);
}
this._canvasListeners.clear();
for (const bubble of this._viewBubbles.values()) {
bubble.release();
}
this._viewBubbles.clear();
for (const bubble of this._windowBubbles.values()) {
bubble.release();
}
this._windowBubbles.clear();
for (const bubble of this._canvasBubbles.values()) {
bubble.release();
}
this._canvasBubbles.clear();
const types = [Event_Source_Type.chart, Event_Source_Type.window, Event_Source_Type.canvas];

types.forEach(type => {
const listeners = this.getEventListeners(type);
for (const entry of listeners.entries()) {
this._compiler.removeEventListener(type, entry[0], entry[1]);
}
listeners.clear();
});

[this._viewBubbles, this._windowBubbles, this._canvasBubbles].forEach(bubbles => {
for (const bubble of bubbles.values()) {
bubble.release();
}
bubbles.clear();
});
}

release(): void {
Expand Down

0 comments on commit fb2e4f7

Please sign in to comment.