Skip to content

Commit c13fcd6

Browse files
authored
Merge pull request #263 from wechat-miniprogram/feat-revert-listener-event-replacer
Revert listenerEventReplacer & call setEventListenerWrapper as default
2 parents 8804ad0 + 3262af3 commit c13fcd6

File tree

6 files changed

+7
-157
lines changed

6 files changed

+7
-157
lines changed

glass-easel-template-compiler/src/proc_gen/tag.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ impl Template {
6767
write!(w, "R.setFnFilter(Q.A,Q.B)")?;
6868
Ok(())
6969
})?;
70-
w.expr_stmt(|w| {
71-
write!(w, "if(typeof R.setEventListenerWrapper==='function')R.setEventListenerWrapper(Q.C)")?;
72-
Ok(())
73-
})?;
7470
}
71+
w.expr_stmt(|w| {
72+
write!(w, "if(typeof R.setEventListenerWrapper==='function')R.setEventListenerWrapper(Q.C)")?;
73+
Ok(())
74+
})?;
7575
let mut writer = JsTopScopeWriter::new(String::new());
7676
writer.align(w);
7777
let define_root_ident = writer.function_scope(|w| {

glass-easel/src/behavior.ts

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,6 @@ export class BehaviorBuilder<
189189
_$init: { func: (this: any, ctx: any) => any; once: boolean }[] = []
190190
/** @internal */
191191
_$methodCallerInit?: (this: ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>) => any
192-
/** @internal */
193-
_$listenerEventReplacer?: (
194-
this: ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>,
195-
event: ShadowedEvent<unknown>,
196-
) => ShadowedEvent<unknown>
197192

198193
/** @internal */
199194
constructor(is: string | undefined, ownerSpace: ComponentSpace) {
@@ -214,21 +209,6 @@ export class BehaviorBuilder<
214209
return this as any
215210
}
216211

217-
/**
218-
* Set a listener wrapper function
219-
*
220-
* It should return the wrapped listener.
221-
*/
222-
listenerEventReplacer(
223-
func: (
224-
this: ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>,
225-
event: ShadowedEvent<unknown>,
226-
) => ShadowedEvent<unknown>,
227-
): ResolveBehaviorBuilder<this, TChainingFilter> {
228-
this._$listenerEventReplacer = func
229-
return this as any
230-
}
231-
232212
/**
233213
* Add a behavior
234214
*
@@ -870,11 +850,6 @@ export class Behavior<
870850
_$methodCallerInit?: (
871851
this: ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>,
872852
) => ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>
873-
/** @internal */
874-
_$listenerEventReplacer?: (
875-
this: ComponentInstance<TData, TProperty, TMethod, TExtraThisFields>,
876-
event: ShadowedEvent<unknown>,
877-
) => ShadowedEvent<unknown>
878853

879854
/**
880855
* Create a behavior with classic-style definition
@@ -925,7 +900,6 @@ export class Behavior<
925900
this._$relationMap = undefined
926901
this._$init = []
927902
this._$methodCallerInit = builder._$methodCallerInit
928-
this._$listenerEventReplacer = builder._$listenerEventReplacer
929903
}
930904

931905
general(): GeneralBehavior {

glass-easel/src/component.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,13 +1233,6 @@ export class Component<
12331233
return this._$methodCaller
12341234
}
12351235

1236-
/**
1237-
* Get the final event object
1238-
*/
1239-
getEventObject(e: ShadowedEvent<unknown>): ShadowedEvent<any> {
1240-
return this._$behavior._$listenerEventReplacer?.(e) || e
1241-
}
1242-
12431236
/**
12441237
* Add a lifetime event listener on the component
12451238
*/

glass-easel/src/event.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,12 @@ export class Event<TDetail> {
272272
targetCaller: Element,
273273
mark: { [name: string]: unknown } | null,
274274
currentTargetCaller: Element,
275-
ownerHost: GeneralComponent | undefined,
276275
): ShadowedEvent<TDetail> {
277276
const ret = Object.create(this) as ShadowedEvent<TDetail>
278277
ret.target = targetCaller
279278
ret.mark = mark
280279
ret.currentTarget = currentTargetCaller
281-
return ownerHost?.getEventObject(ret) || ret
280+
return ret
282281
}
283282

284283
getEventName(): string {
@@ -347,12 +346,7 @@ export class Event<TDetail> {
347346
? currentTarget.getMethodCaller() || currentTarget
348347
: currentTarget
349348
this._$hasListener ||= efa.funcArr.hasFunc()
350-
const ev = this.wrapShadowedEvent(
351-
targetCaller,
352-
mark,
353-
currentTargetCaller,
354-
target.ownerShadowRoot?.getHostNode(),
355-
)
349+
const ev = this.wrapShadowedEvent(targetCaller, mark, currentTargetCaller)
356350
const ret = efa.funcArr.call(
357351
currentTargetCaller,
358352
[ev],

glass-easel/src/tmpl/native_rendering.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export class GlassEaselTemplateDOMInstance implements TemplateInstance, External
137137
const evName = event.getEventName()
138138
const bubbles = event.bubbles
139139
for (;;) {
140-
const shadowedEvent = event.wrapShadowedEvent(target as any, null, cur as any, this.comp)
140+
const shadowedEvent = event.wrapShadowedEvent(target as any, null, cur as any)
141141
const f = (cur as unknown as ElementWithEvent)._$wxTmplEv?.[evName]
142142
if (f) {
143143
const r = f.call(cur, shadowedEvent)

glass-easel/tests/core/behavior.test.ts

Lines changed: 0 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -512,117 +512,6 @@ describe('chaining-form interface', () => {
512512
expect(callOrder).toStrictEqual([3, 1, 2])
513513
})
514514

515-
test('chaining listener event replacer', () => {
516-
const callOrder: [number, number | undefined][] = []
517-
const beh = componentSpace
518-
.define()
519-
.init(({ self, lifetime }) => {
520-
lifetime('created', () => {
521-
self.addListener('customEv', (e) => {
522-
callOrder.push([
523-
1,
524-
(e as glassEasel.ShadowedEvent<{ eventOrder?: number }>).detail.eventOrder,
525-
])
526-
})
527-
})
528-
})
529-
.registerBehavior()
530-
531-
let eventOrder = 0
532-
const compDef = componentSpace
533-
.define()
534-
.behavior(beh)
535-
.template(tmpl(`<div id="wrapper" bind:customEv="onCustomEv"></div>`))
536-
.listenerEventReplacer((e) => {
537-
eventOrder += 1
538-
e.detail = { eventOrder }
539-
return e
540-
})
541-
.init(({ self, lifetime, listener }) => {
542-
lifetime('created', () => {
543-
;(self.shadowRoot as glassEasel.ShadowRoot).addListener('customEv', (e) => {
544-
callOrder.push([
545-
3,
546-
(e as glassEasel.ShadowedEvent<{ eventOrder: number }>).detail.eventOrder,
547-
])
548-
})
549-
})
550-
return {
551-
onCustomEv: listener((e) => {
552-
callOrder.push([
553-
2,
554-
(e as glassEasel.ShadowedEvent<{ eventOrder: number }>).detail.eventOrder,
555-
])
556-
}),
557-
}
558-
})
559-
.registerComponent()
560-
const root = glassEasel.Component.createWithContext('root', compDef, domBackend)
561-
;(root.$.wrapper as glassEasel.Element).triggerEvent(
562-
'customEv',
563-
{},
564-
{ bubbles: true, composed: true },
565-
)
566-
expect(callOrder).toStrictEqual([
567-
[2, 1],
568-
[3, 2],
569-
[1, undefined],
570-
])
571-
})
572-
573-
test('chaining listener event replacer on native rendering', () => {
574-
const callOrder: [number, number | undefined][] = []
575-
const beh = componentSpace
576-
.define()
577-
.init(({ self, lifetime }) => {
578-
lifetime('created', () => {
579-
self.addListener('customEv', (e) => {
580-
callOrder.push([
581-
1,
582-
(e as glassEasel.ShadowedEvent<{ eventOrder?: number }>).detail.eventOrder,
583-
])
584-
})
585-
})
586-
})
587-
.registerBehavior()
588-
589-
let eventOrder = 0
590-
const compDef = componentSpace
591-
.define()
592-
.behavior(beh)
593-
.options({ externalComponent: true })
594-
.template(tmpl(`<div id="wrapper" bind:customEv="onCustomEv"></div>`))
595-
.listenerEventReplacer((e) => {
596-
eventOrder += 1
597-
e.detail = { eventOrder }
598-
return e
599-
})
600-
// eslint-disable-next-line arrow-body-style
601-
.init(({ listener }) => {
602-
return {
603-
onCustomEv: listener((e) => {
604-
callOrder.push([
605-
2,
606-
(e as glassEasel.ShadowedEvent<{ eventOrder: number }>).detail.eventOrder,
607-
])
608-
}),
609-
}
610-
})
611-
.registerComponent()
612-
const root = glassEasel.Component.createWithContext('root', compDef, domBackend)
613-
glassEasel.triggerExternalEvent(
614-
root,
615-
root.$.wrapper as glassEasel.GeneralBackendElement,
616-
'customEv',
617-
{},
618-
{ bubbles: true, composed: true },
619-
)
620-
expect(callOrder).toStrictEqual([
621-
[2, 1],
622-
[1, undefined],
623-
])
624-
})
625-
626515
test('chaining relations', () => {
627516
const eventArr: number[] = []
628517
const parentDef = componentSpace

0 commit comments

Comments
 (0)