From fc0b49eca20cd33a053a9ad79065bb69b7549307 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Fri, 28 Dec 2018 21:04:40 -0500 Subject: [PATCH] make event handler names unique across components - fixes #1919 --- .../render-dom/wrappers/Element/index.ts | 2 +- .../_config.js | 37 +++++++++++++++++++ .../main.html | 5 +++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js create mode 100644 test/runtime/samples/binding-input-text-contextual-deconflicted/main.html diff --git a/src/compile/render-dom/wrappers/Element/index.ts b/src/compile/render-dom/wrappers/Element/index.ts index 5f6f94f38b..9b51799cd2 100644 --- a/src/compile/render-dom/wrappers/Element/index.ts +++ b/src/compile/render-dom/wrappers/Element/index.ts @@ -410,7 +410,7 @@ export default class ElementWrapper extends Wrapper { .filter(group => group.bindings.length); groups.forEach(group => { - const handler = block.getUniqueName(`${this.var}_${group.events.join('_')}_handler`); + const handler = renderer.component.getUniqueName(`${this.var}_${group.events.join('_')}_handler`); renderer.component.declarations.push(handler); renderer.component.template_references.add(handler); diff --git a/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js new file mode 100644 index 0000000000..37af5080b9 --- /dev/null +++ b/test/runtime/samples/binding-input-text-contextual-deconflicted/_config.js @@ -0,0 +1,37 @@ +export default { + props: { + foo: 'a', + items: ['x'], + }, + + html: ` +

a

+

x

+ `, + + ssrHtml: ` +

a

+

x

+ `, + + async test({ assert, component, target, window }) { + const inputs = [...target.querySelectorAll('input')]; + const items = component.items; + const event = new window.Event('input'); + + assert.equal(inputs[0].value, 'a'); + + inputs[0].value = 'b'; + inputs[1].value = 'y'; + await inputs[0].dispatchEvent(event); + await inputs[1].dispatchEvent(event); + + assert.equal(component.foo, 'b'); + assert.equal(component.items[0], 'y'); + + assert.htmlEqual(target.innerHTML, ` +

b

+

y

+ `); + }, +}; diff --git a/test/runtime/samples/binding-input-text-contextual-deconflicted/main.html b/test/runtime/samples/binding-input-text-contextual-deconflicted/main.html new file mode 100644 index 0000000000..ebaa1eda71 --- /dev/null +++ b/test/runtime/samples/binding-input-text-contextual-deconflicted/main.html @@ -0,0 +1,5 @@ +

{foo}

+ +{#each items as bar} +

{bar}

+{/each} \ No newline at end of file