diff --git a/src/compile/nodes/EventHandler.ts b/src/compile/nodes/EventHandler.ts index 6df7fa98b2..1f822296d7 100644 --- a/src/compile/nodes/EventHandler.ts +++ b/src/compile/nodes/EventHandler.ts @@ -12,8 +12,7 @@ const validBuiltins = new Set(['set', 'fire', 'destroy']); export default class EventHandler extends Node { name: string; modifiers: Set; - dependencies: Set; - expression: Node; + expression: Expression; callee: any; // TODO usesComponent: boolean; @@ -31,15 +30,13 @@ export default class EventHandler extends Node { this.name = info.name; this.modifiers = new Set(info.modifiers); - this.dependencies = new Set(); - if (info.expression) { this.expression = new Expression(component, parent, template_scope, info.expression, true); this.snippet = this.expression.snippet; let { scope, map } = createScopes(info.expression); - walk(this.expression, { + walk(info.expression, { enter: (node, parent) => { if (map.has(node)) { scope = map.get(node); diff --git a/src/compile/nodes/shared/Expression.ts b/src/compile/nodes/shared/Expression.ts index 1d52a10593..18a1b20819 100644 --- a/src/compile/nodes/shared/Expression.ts +++ b/src/compile/nodes/shared/Expression.ts @@ -54,11 +54,12 @@ const precedence: Record number> = { }; export default class Expression { - component: Component; + startnent: Component; node: any; snippet: string; references: Set; dependencies: Set; + contextual_dependencies: Set; usesContext = false; usesEvent = false; @@ -79,6 +80,7 @@ export default class Expression { this.snippet = `[✂${info.start}-${info.end}✂]`; const dependencies = new Set(); + const contextual_dependencies = new Set(); const { code, helpers } = component; @@ -119,6 +121,7 @@ export default class Expression { } expression.usesContext = true; + contextual_dependencies.add(name); if (!isSynthetic && !isEventHandler) { //