Допустим, у меня есть это основное приложение:
import Field from '../components/Field.svelte';
var fields = [
{
id: 'Check',
type: 'CheckBox',
value: false,
},
{
id: 'Text'
}
];
var components = {};
$: console.log(components);
</script>
<style>
</style>
<form>
{#each fields as item}
<Field {...item} bind:bind={components[item.bind]} bind:this={components[item.id]}></Field>
{/each}
</form>
, и у меня есть два компонента, CheckBox
и TextArea
, оба просто реализуют входные данные HTML, а компонент поля реализован так :
import CheckBox from './CheckBox.svelte';
import TextArea from './TextArea.svelte';
export let attributes = {};
export let type = 'TextArea';
export let value = '';
export let id;
export let bind;
const fieldComponents = {
'CheckBox': CheckBox,
'TextArea': TextArea
};
</script>
<svelte:component {bind} {id} value={value} this={fieldComponents[type]} {attributes}></svelte:component>
Таким образом, я создаю динамическую c форму, которая имеет флажок и текстовую область.
Я хочу, чтобы атрибут «bind» был доступен изнутри компонент, и чтобы иметь возможность связать другой компонент, таким образом я смогу достичь чего-то вроде этого:
<input type="checkbox" bind:checked={bind.value}>
, что означает, что если текстовая область будет иметь текст, флажок будет установлен , если он пуст, флажок будет снят.
после того, как все компоненты рендерится, я смогу получить к ним доступ, используя объект components
, потому что я связываю их вот так bind:this={components[item.id]}
но до того, как они рендерится, я не могу получить к ним доступ, есть ли способ сделать так, чтобы один компонент мог динамически связываться с другим? Я продемонстрировал использование только 2 компонентов, это может быть также большой набор компонентов.
Я хочу определить привязку, используя свойство bind
внутри массива fields
, которое соответствует id
другого поля.