diff --git a/packages/polymer-legacy-adapter/src/template-renderer-templatizer.js b/packages/polymer-legacy-adapter/src/template-renderer-templatizer.js index 1a07adca00..0ab77a6946 100644 --- a/packages/polymer-legacy-adapter/src/template-renderer-templatizer.js +++ b/packages/polymer-legacy-adapter/src/template-renderer-templatizer.js @@ -101,6 +101,10 @@ export class Templatizer extends PolymerElement { }, {}); this.__TemplateClass = templatize(this.__template, this, { + // Events handled by declarative event listeners + // (`on-event="handler"`) will be decorated with a `model` property pointing + // to the template instance that stamped it. + parentModel: true, // This property prevents the template instance properties // from passing into the `forwardHostProp` callback instanceProps, diff --git a/packages/polymer-legacy-adapter/test/vaadin-template-renderer.test.js b/packages/polymer-legacy-adapter/test/vaadin-template-renderer.test.js index 7c8acb920f..39e0b51019 100644 --- a/packages/polymer-legacy-adapter/test/vaadin-template-renderer.test.js +++ b/packages/polymer-legacy-adapter/test/vaadin-template-renderer.test.js @@ -119,6 +119,17 @@ describe('vaadin-template-renderer', () => { expect(spy.calledOnce).to.be.true; }); + it('should include model in the event', () => { + const host = fixtureSync(``); + const component = host.$.component; + const button = component.$.content.querySelector('button'); + const spy = sinon.spy(host, 'onClick'); + + click(button); + + expect(spy.getCall(0).args[0].model).to.equal(component.$.content.__templateInstance); + }); + it('should re-render the template instance when changing a parent property', async () => { const host = fixtureSync(``); const component = host.$.component;