mirror of https://github.com/sveltejs/svelte
				
				
				
			fix bind:this, skip checking before adding to binding_callbacks (#5072)
	
		
	
				
					
				
			
							parent
							
								
									0520a10dc0
								
							
						
					
					
						commit
						1a71e04079
					
				@ -0,0 +1,53 @@
 | 
				
			||||
let calls = [];
 | 
				
			||||
function callback(refs) {
 | 
				
			||||
	calls.push(refs.map(({ ref }) => ({ ref })));
 | 
				
			||||
}
 | 
				
			||||
export default {
 | 
				
			||||
	html: ``,
 | 
				
			||||
	props: {
 | 
				
			||||
		callback,
 | 
				
			||||
	},
 | 
				
			||||
	after_test() {
 | 
				
			||||
		calls = [];
 | 
				
			||||
	},
 | 
				
			||||
	async test({ assert, component, target }) {
 | 
				
			||||
		assert.equal(calls.length, 1);
 | 
				
			||||
		assert.equal(calls[0].length, 0);
 | 
				
			||||
 | 
				
			||||
		await component.addItem();
 | 
				
			||||
 | 
				
			||||
		let divs = target.querySelectorAll("div");
 | 
				
			||||
 | 
				
			||||
		assert.equal(calls.length, 3);
 | 
				
			||||
		assert.equal(calls[1].length, 1);
 | 
				
			||||
		assert.equal(calls[1][0].ref, null);
 | 
				
			||||
		assert.equal(calls[2].length, 1);
 | 
				
			||||
		assert.equal(calls[2][0].ref, divs[0]);
 | 
				
			||||
 | 
				
			||||
		await component.addItem();
 | 
				
			||||
 | 
				
			||||
		divs = target.querySelectorAll("div");
 | 
				
			||||
 | 
				
			||||
		assert.equal(calls.length, 5);
 | 
				
			||||
		assert.equal(calls[3].length, 2);
 | 
				
			||||
		assert.equal(calls[3][0].ref, divs[0]);
 | 
				
			||||
		assert.equal(calls[3][1].ref, null);
 | 
				
			||||
		assert.equal(calls[4].length, 2);
 | 
				
			||||
		assert.equal(calls[4][0].ref, divs[0]);
 | 
				
			||||
		assert.equal(calls[4][1].ref, divs[1]);
 | 
				
			||||
 | 
				
			||||
		await component.addItem();
 | 
				
			||||
 | 
				
			||||
		divs = target.querySelectorAll("div");
 | 
				
			||||
 | 
				
			||||
		assert.equal(calls.length, 7);
 | 
				
			||||
		assert.equal(calls[5].length, 3);
 | 
				
			||||
		assert.equal(calls[5][0].ref, divs[0]);
 | 
				
			||||
		assert.equal(calls[5][1].ref, divs[1]);
 | 
				
			||||
		assert.equal(calls[5][2].ref, null);
 | 
				
			||||
		assert.equal(calls[6].length, 3);
 | 
				
			||||
		assert.equal(calls[6][0].ref, divs[0]);
 | 
				
			||||
		assert.equal(calls[6][1].ref, divs[1]);
 | 
				
			||||
		assert.equal(calls[6][2].ref, divs[2]);
 | 
				
			||||
	},
 | 
				
			||||
};
 | 
				
			||||
@ -0,0 +1,17 @@
 | 
				
			||||
<script>
 | 
				
			||||
	import { tick } from 'svelte';
 | 
				
			||||
	let refs = [];
 | 
				
			||||
 | 
				
			||||
	export function addItem() {
 | 
				
			||||
		refs = refs.concat({ ref: null });
 | 
				
			||||
		return tick();
 | 
				
			||||
	}
 | 
				
			||||
 | 
				
			||||
	export let callback;
 | 
				
			||||
 | 
				
			||||
	$: callback(refs);
 | 
				
			||||
</script>
 | 
				
			||||
 | 
				
			||||
{#each refs as xxx}
 | 
				
			||||
	<div bind:this={xxx.ref} />
 | 
				
			||||
{/each}
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue