mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-06-05 01:32:10 +08:00
fix(core): app.emit 在节点配置事件时不应短路 super.emit
去掉 eventHelper.emit 前的 return,避免节点配置 events 后 app.on 注册的监听器被吞掉,并补充回归测试。
This commit is contained in:
parent
62fc818ae1
commit
2846f9eb2a
@ -244,7 +244,7 @@ class App extends EventEmitter {
|
|||||||
node.data?.id &&
|
node.data?.id &&
|
||||||
node.eventKeys.has(`${String(name)}_${node.data.id}`)
|
node.eventKeys.has(`${String(name)}_${node.data.id}`)
|
||||||
) {
|
) {
|
||||||
return this.eventHelper.emit(node.eventKeys.get(`${String(name)}_${node.data.id}`)!, node, ...otherArgs);
|
this.eventHelper.emit(node.eventKeys.get(`${String(name)}_${node.data.id}`)!, node, ...otherArgs);
|
||||||
}
|
}
|
||||||
return super.emit(name, ...args);
|
return super.emit(name, ...args);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -431,6 +431,58 @@ describe('App 配置/方法/组件注册', () => {
|
|||||||
expect(typeof result).toBe('boolean');
|
expect(typeof result).toBe('boolean');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 回归用例:节点配置了 events 时,eventHelper 派发不能短路掉 super.emit,
|
||||||
|
// 即 app.on(name, cb) 注册的回调依然要被触发。
|
||||||
|
test('emit: 节点已绑定 events 时,app.on 注册的监听器仍然会被调用', () => {
|
||||||
|
const app = new App({
|
||||||
|
config: {
|
||||||
|
type: NodeType.ROOT,
|
||||||
|
id: 'app',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: NodeType.PAGE,
|
||||||
|
id: 'p1',
|
||||||
|
items: [{ id: 'btn', type: 'button', events: [{ name: 'click', actions: [] }] }],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as any,
|
||||||
|
});
|
||||||
|
const node = app.getNode('btn')!;
|
||||||
|
const cb = vi.fn();
|
||||||
|
app.on('click', cb);
|
||||||
|
|
||||||
|
const result = app.emit('click', node, 'arg1');
|
||||||
|
|
||||||
|
expect(cb).toHaveBeenCalledTimes(1);
|
||||||
|
expect(cb).toHaveBeenCalledWith(node, 'arg1');
|
||||||
|
// EventEmitter.emit 在有 listener 时返回 true
|
||||||
|
expect(result).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('emit: 未命中节点 eventKeys 时,app.on 注册的监听器正常被调用', () => {
|
||||||
|
const app = new App({
|
||||||
|
config: {
|
||||||
|
type: NodeType.ROOT,
|
||||||
|
id: 'app',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: NodeType.PAGE,
|
||||||
|
id: 'p1',
|
||||||
|
items: [{ id: 'btn', type: 'button' }],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as any,
|
||||||
|
});
|
||||||
|
const node = app.getNode('btn')!;
|
||||||
|
const cb = vi.fn();
|
||||||
|
app.on('click', cb);
|
||||||
|
|
||||||
|
app.emit('click', node, 'arg1');
|
||||||
|
|
||||||
|
expect(cb).toHaveBeenCalledTimes(1);
|
||||||
|
expect(cb).toHaveBeenCalledWith(node, 'arg1');
|
||||||
|
});
|
||||||
|
|
||||||
test('destroy 清理所有资源', () => {
|
test('destroy 清理所有资源', () => {
|
||||||
const app = new App({
|
const app = new App({
|
||||||
config: {
|
config: {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user