fix: improve event delegation with shadowed bindings (#10620)

* fix: improve event delegation with shadowed bindings

* fix: improve event delegation with shadowed bindings
pull/10622/head
Dominic Gannaway 4 months ago committed by GitHub
parent 351d463bc4
commit b4a70ea38a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
"svelte": patch
---
fix: improve event delegation with shadowed bindings

@ -176,6 +176,12 @@ function get_delegated_event(event_name, handler, context) {
return non_hoistable;
}
const binding = scope.get(reference);
const local_binding = context.state.scope.get(reference);
// If we are referencing a binding that is shadowed in another scope then bail out.
if (local_binding !== null && binding !== null && local_binding.node !== binding.node) {
return non_hoistable;
}
// If we have multiple references to the same store using $ prefix, bail out.
if (

@ -0,0 +1,16 @@
import { test } from '../../test';
import { log } from './log.js';
export default test({
before_test() {
log.length = 0;
},
async test({ assert, target }) {
const btn = target.querySelector('button');
btn?.click();
await Promise.resolve();
assert.deepEqual(log, ['method']);
}
});

@ -0,0 +1,12 @@
<script>
import { log } from './log.js';
let method = $state('method');
function submitPay() {
log.push(method);
}
let methods = [{method:1}];
</script>
{#each methods as {method}}
<button onclick={submitPay}>{method}</button>
{/each}
Loading…
Cancel
Save