Я новичок в Svelte и пытаюсь использовать его для написания одностраничного приложения, которое будет отображать форму с некоторыми значениями полей, динамически вычисляемыми на основе других полей. В идеале я хотел бы управлять отрисовкой формы с помощью статических файлов конфигурации JSON (чтобы упростить создание новых форм с помощью других инструментов, выводящих JSON).
Я хочу иметь возможность динамически определять отношения между полями формы, чтобы, когда пользователь вводит значения, вычисленные поля автоматически пересчитывались.
Я хотел бы получить что-то похожее на это (но, очевидно, это не работает):
<script>
let objFormConfig = JSON.parse(`{
"formElements": [
{
"id": "f1",
"label": "First value?"
},
{
"id": "f2",
"label": "Second value?"
},
{
"id": "f2",
"label": "Calculated automatically",
"computed": "f1 + f2"
}
]
}`);
</script>
<form>
{#each objFormConfig.formElements as item}
<div>
<label for="{item.id}">{item.label}
{#if item.computed}
<input type=number id={item.id} value={item.computed} readonly/>
{:else}
<input type=number id={item.id} bind:value={item.id}/>
{/if}
</label>
</div>
{/each}
</form>
Действующий (нерабочий) пример REPL здесь.
Может кто-то указать мне верное направление? Или, если это совершенно невозможно, не могли бы вы предложить другой подход?
Одна из моих идей - добавить на карту строковые ключи, а затем строковые имена, ссылающиеся на функции, которые вызываются для вычисления результата, но это кажется неуклюжим