From 6cc66bbbaac0a190c33ea8750432289ca6c9c85f Mon Sep 17 00:00:00 2001 From: dxq613 Date: Tue, 14 Apr 2020 18:07:43 +0800 Subject: [PATCH] feat(delegate): name support array --- packages/g-base/src/abstract/element.ts | 31 ++++++++++++++++-------- packages/g-base/tests/unit/event-spec.js | 11 ++++++++- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/g-base/src/abstract/element.ts b/packages/g-base/src/abstract/element.ts index 40018a2eb..8442d44dd 100644 --- a/packages/g-base/src/abstract/element.ts +++ b/packages/g-base/src/abstract/element.ts @@ -623,21 +623,32 @@ abstract class Element extends Base implements IElement { ) { break; } - // 事件委托的形式 name:type - const eventName = name + DELEGATION_SPLIT + type; - if (events[eventName] || events[WILDCARD]) { - // 对于通配符 *,事件名称 = 委托事件名称 - eventObj.name = eventName; - eventObj.currentTarget = element; - eventObj.delegateTarget = this; - // 将委托事件的监听对象 delegateObject 挂载到事件对象上 - eventObj.delegateObject = element.get('delegateObject'); - this.emit(eventName, eventObj); + if (isArray(name)) { + each(name, (subName) => { + this.emitDelegateEvent(element, subName, eventObj); + }); + } else { + this.emitDelegateEvent(element, name, eventObj); } } } } + private emitDelegateEvent(element, name: string, eventObj: GraphEvent) { + const events = this.getEvents(); + // 事件委托的形式 name:type + const eventName = name + DELEGATION_SPLIT + eventObj.type; + if (events[eventName] || events[WILDCARD]) { + // 对于通配符 *,事件名称 = 委托事件名称 + eventObj.name = eventName; + eventObj.currentTarget = element; + eventObj.delegateTarget = this; + // 将委托事件的监听对象 delegateObject 挂载到事件对象上 + eventObj.delegateObject = element.get('delegateObject'); + this.emit(eventName, eventObj); + } + } + /** * 移动元素 * @param {number} translateX 水平移动距离 diff --git a/packages/g-base/tests/unit/event-spec.js b/packages/g-base/tests/unit/event-spec.js index ac4a9b16f..06da26784 100644 --- a/packages/g-base/tests/unit/event-spec.js +++ b/packages/g-base/tests/unit/event-spec.js @@ -1256,10 +1256,17 @@ describe('test graphic events', () => { let enterCalled1 = 0; let leaveCalled1 = 0; - group1.set('name', 'g1'); + + let enterCalledTest = 0; + group1.set('name', ['g1', 'gtest']); canvas.on('g1:mouseenter', () => { enterCalled1++; }); + + canvas.on('gtest:mouseenter', () => { + enterCalledTest++; + }); + canvas.on('g1:mouseleave', () => { leaveCalled1++; }); @@ -1285,6 +1292,7 @@ describe('test graphic events', () => { }); expect(enterCalled).eql(1); expect(enterCalled1).eql(1); + expect(enterCalledTest).eql(1); // 移动到 g11 的第二个图形 simulateMouseEvent(element, 'mousemove', { clientX: clientX + 11, @@ -1303,6 +1311,7 @@ describe('test graphic events', () => { expect(leaveCalled).eql(1); expect(leaveCalled1).eql(0); }); + it('destroy', () => { controller.destroy(); expect(controller.canvas).eql(null);