Slim.js — легковесная библиотека для построения компонентного интерфейса на JavaScript, ориентированная на декларативное создание UI и реактивное управление состоянием. Одной из частых задач при работе с веб-приложениями является управление формами: сброс их состояния и предзаполнение данными.
Slim.js использует декларативный синтаксис для связывания данных с элементами DOM. Основные атрибуты для работы с формами:
bind — связывает значение поля формы с
переменной компонента. Например,<input type="text" bind="userName">
Здесь значение userName в компоненте автоматически
синхронизируется с содержимым поля ввода.
on — позволяет подписываться на
события элементов формы, такие как submit,
input, change. Например:<form onsub mit="submitForm">
ref — создаёт ссылку на DOM-элемент
для прямого доступа в методах компонента, что удобно для ручного сброса
формы.Сброс формы в Slim.js можно реализовать несколькими способами:
reset
HTMLFormElementСсылка на форму через ref позволяет вызвать встроенный
метод reset:
class MyForm extends Slim {
submitForm(event) {
event.preventDefault();
console.log(this.userName);
this.$refs.form.reset();
}
}
<form ref="form" onsub mit="submitForm">
<input type="text" bind="userName">
<button type="submit">Отправить</button>
</form>
Метод reset возвращает все поля формы к исходным
значениям, указанным в HTML.
В Slim.js состояния полей можно хранить в переменных компонента и сбрасывать их напрямую:
class MyForm extends Slim {
userName = '';
resetForm() {
this.userName = '';
}
}
<input type="text" bind="userName">
<button type="button" oncl ick="resetForm">Сброс</button>
Такой подход позволяет контролировать значения без обращения к DOM и сохраняет реактивность данных.
Предзаполнение формы обычно выполняется через инициализацию
переменных компонента, связанных с полями формы через
bind.
class MyForm extends Slim {
userName = '';
email = '';
connectedCallback() {
super.connectedCallback();
this.loadData();
}
loadData() {
const data = { userName: 'Иван', email: 'ivan@example.com' };
this.userName = data.userName;
this.email = data.email;
}
}
<form>
<input type="text" bind="userName">
<input type="email" bind="email">
</form>
Все поля автоматически обновятся при изменении значений переменных.
Slim.js поддерживает реактивное обновление, поэтому можно подгружать данные с сервера и автоматически обновлять форму:
async loadData() {
const response = await fetch('/api/user/123');
const data = await response.json();
this.userName = data.name;
this.email = data.email;
}
Это позволяет динамически предзаполнять формы при открытии страницы или после действия пользователя.
Для динамических форм, где поля создаются через цикл или условные
конструкции (#for, #if), важно
синхронизировать реактивные переменные с DOM:
<div #for="field in fields">
<input type="text" bind="field.value">
</div>
<button oncl ick="resetAll">Сброс</button>
resetAll() {
this.fields.forEach(f => f.value = '');
}
Такой подход позволяет работать с любым количеством полей без жесткого связывания с DOM.
ref для доступа к форме, если требуется
стандартный метод reset.Сбалансированное использование реактивных переменных и ссылок на элементы DOM обеспечивает простое управление формами, их сброс и предзаполнение, сохраняя при этом декларативный стиль Slim.js.