Knockout.js предоставляет мощный механизм привязки данных, который позволяет синхронизировать значения интерфейса с моделью данных без необходимости вручную отслеживать изменения в DOM. Основное внимание уделяется двусторонней привязке, обеспечивающей автоматическое обновление как модели, так и представления при изменениях.
valueПривязка value используется для синхронизации значения
элемента формы с наблюдаемым свойством модели.
<input type="text" data-bind="value: firstName" />
var viewModel = {
firstName: ko.observable("Иван")
};
ko.applyBindings(viewModel);
Особенности:
change по умолчанию.valueUpdate, чтобы отслеживать
обновления в реальном времени:<input type="text" data-bind="value: firstName, valueUpdate: 'input'" />
<input>,
<textarea>, <select>.textInputПривязка textInput обеспечивает более динамичное
взаимодействие, обновляя наблюдаемое значение при каждом вводе
символа:
<input type="text" data-bind="textInput: firstName" />
value заключается в том, что изменения
применяются моментально, без ожидания события
change.checkedПривязка checked синхронизирует состояние чекбоксов и
радиокнопок с наблюдаемым свойством.
<label>
<input type="checkbox" data-bind="checked: isSubscribed" /> Подписка
</label>
var viewModel = {
isSubscribed: ko.observable(true)
};
Особенности:
<label><input type="checkbox" data-bind="checked: selectedColors" value="Red" /> Красный</label>
<label><input type="checkbox" data-bind="checked: selectedColors" value="Green" /> Зеленый</label>
<label><input type="checkbox" data-bind="checked: selectedColors" value="Blue" /> Синий</label>
var viewModel = {
selectedColors: ko.observableArray(["Green"])
};
options и selectedOptionsДля <select> элементов Knockout.js предоставляет
комплексные привязки:
<select data-bind="options: availableFruits, value: favoriteFruit"></select>
var viewModel = {
availableFruits: ko.observableArray(["Яблоко", "Банан", "Вишня"]),
favoriteFruit: ko.observable("Банан")
};
options — наполняет <select> элемент
значениями.value — двусторонняя привязка выбранного элемента.selectedOptions
с массивом:<select multiple="multiple" data-bind="options: availableFruits, selectedOptions: chosenFruits"></select>
var viewModel = {
availableFruits: ko.observableArray(["Яблоко", "Банан", "Вишня"]),
chosenFruits: ko.observableArray(["Вишня"])
};
enable и
disableПозволяет управлять доступностью элементов формы на основе состояния модели:
<input type="text" data-bind="value: name, enable: isEditable" />
var viewModel = {
name: ko.observable("Иван"),
isEditable: ko.observable(true)
};
enable и disable являются
обратными по логике: enable: true =
элемент активен, disable: true = элемент заблокирован.attrПривязка attr позволяет устанавливать любые атрибуты
элементов формы динамически:
<input type="text" data-bind="value: username, attr: { placeholder: placeholderText }" />
var viewModel = {
username: ko.observable(""),
placeholderText: ko.observable("Введите имя пользователя")
};
eventПривязка event обеспечивает связывание событий формы с
функциями модели:
<button data-bind="click: submitForm">Отправить</button>
var viewModel = {
submitForm: function() {
alert("Форма отправлена: " + this.username());
},
username: ko.observable("")
};
click,
keypress, mouseover, change и
др.Knockout.js сам по себе не содержит встроенной валидации, но легко
интегрируется с библиотеками, такими как
Knockout Validation.
Пример базовой проверки длины поля:
var viewModel = {
username: ko.observable("").extend({ required: true, minLength: 3 })
};
textInput, для стандартного поведения —
value.checked для управления состоянием флагов и
групп чекбоксов.options и
selectedOptions.enable/disable.event или
сокращение click.Knockout.js позволяет строить динамические и отзывчивые формы с минимальными усилиями, обеспечивая чистую и поддерживаемую структуру кода. Привязки данных превращают интерфейс в живой объект, полностью синхронизированный с моделью.