fix contextual dynamic bind:this in {#each} (#4759)

pull/4772/head
Th0rN13 5 years ago committed by GitHub
parent 5efeeecee8
commit a73be39a80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -55,6 +55,9 @@ export default function bind_this(component: Component, block: Block, binding: B
const args = []; const args = [];
for (const id of contextual_dependencies) { for (const id of contextual_dependencies) {
args.push(id); args.push(id);
if (block.variables.has(id.name)) {
if (block.renderer.context_lookup.get(id.name).is_contextual) continue;
}
block.add_variable(id, block.renderer.reference(id.name)); block.add_variable(id, block.renderer.reference(id.name));
} }

@ -0,0 +1,14 @@
export default {
html: ``,
async test({ assert, component, target }) {
component.visible = true;
assert.htmlEqual(target.innerHTML, `
<div>b</div><div>b</div><div>c</div><div>c</div>
`);
assert.equal(component.items1[1], target.querySelector('div'));
assert.equal(component.items2[1], target.querySelector('div:nth-child(2)'));
assert.equal(component.items1[2], target.querySelector('div:nth-child(3)'));
assert.equal(component.items2[2], target.querySelector('div:last-child'));
}
};

@ -0,0 +1,13 @@
<script>
export const items1 = {};
export const items2 = {};
export let data = [
{id: 1, text: "b"},
{id: 2, text: "c"},
];
</script>
{#each data as item (item.id)}
<div bind:this={items1[item.id]}>{item.text}</div>
<div bind:this={items2[item.id]}>{item.text}</div>
{/each}

@ -0,0 +1,14 @@
export default {
html: ``,
async test({ assert, component, target }) {
component.visible = true;
assert.htmlEqual(target.innerHTML, `
<div>a</div><div>a</div><div>b</div><div>b</div>
`);
assert.equal(component.items1[1], target.querySelector('div'));
assert.equal(component.items2[1], target.querySelector('div:nth-child(2)'));
assert.equal(component.items1[2], target.querySelector('div:nth-child(3)'));
assert.equal(component.items2[2], target.querySelector('div:last-child'));
}
};

@ -0,0 +1,13 @@
<script>
export const items1 = {};
export const items2 = {};
var data = [
{id: 1, text: "a"},
{id: 2, text: "b"},
];
</script>
{#each data as {id, text} (id)}
<div bind:this={items1[id]}>{text}</div>
<div bind:this={items2[id]}>{text}</div>
{/each}
Loading…
Cancel
Save