ensure hoisted event handler names are globally unique — fixes #466

pull/467/head
Rich Harris 8 years ago
parent c61ce134df
commit 352bb3d354

@ -44,7 +44,7 @@ export default function visitEventHandler ( generator, block, state, node, attri
// get a name for the event handler that is globally unique
// if hoisted, locally unique otherwise
const handlerName = shouldHoist ?
generator.alias( `${name}_handler` ) :
generator.getUniqueName( `${name}_handler` ) :
block.getUniqueName( `${name}_handler` );
// create the handler body

@ -0,0 +1,36 @@
export default {
data: {
foo: [ 1 ],
bar: [ 2 ],
clicked: 'neither'
},
html: `
<button>foo</button>
<button>bar</button>
<p>clicked: neither</p>
`,
test ( assert, component, target, window ) {
const buttons = target.querySelectorAll( 'button' );
const event = new window.MouseEvent( 'click' );
buttons[0].dispatchEvent( event );
assert.equal( component.get( 'clicked' ), 'foo' );
assert.htmlEqual( target.innerHTML, `
<button>foo</button>
<button>bar</button>
<p>clicked: foo</p>
` );
buttons[1].dispatchEvent( event );
assert.equal( component.get( 'clicked' ), 'bar' );
assert.htmlEqual( target.innerHTML, `
<button>foo</button>
<button>bar</button>
<p>clicked: bar</p>
` );
component.destroy();
}
};

@ -0,0 +1,9 @@
{{#each foo as f}}
<button on:click='set({ clicked: "foo" })'>foo</button>
{{/each}}
{{#each bar as b}}
<button on:click='set({ clicked: "bar" })'>bar</button>
{{/each}}
<p>clicked: {{clicked}}</p>
Loading…
Cancel
Save