Если вы связываетесь со значением с помощью bind:checked={done}
, вы явно просите, чтобы внутреннее значение флажка было отражено в переменной done
, так что это, похоже, противоположно тому, что вы спрашиваете.
Для меня preventDefault
похоже на способ go, если вы хотите предотвратить поведение ввода по умолчанию:
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher()
export let done;
const handleClick = () => {
dispatch('change');
}
const noop = () => {}
</script>
<div class="root" on:click={handleClick}>
<label>
<input type=checkbox checked={done} on:click|preventDefault={noop} />
<slot></slot> [current: {done}]
</label>
</div>
Обновлен REPL
Может быть, более краткая, старая школа, альтернатива могла бы быть такой (обратите внимание, onclick
, а не on:click
):
<input type=checkbox checked={done} onclick="return false" />
В контексте Svelte некоторые могут съежиться и назвать это Кодовый запах, хотя ... Но мне кажется, это нормально.