Backbone.ModelBinder — это расширение для Backbone.js, которое упрощает синхронизацию данных между моделями и пользовательским интерфейсом. Оно позволяет автоматически обновлять представление при изменении модели и наоборот, снижая необходимость ручного написания обработчиков событий. Этот компонент особенно полезен для сложных форм и динамически изменяемых интерфейсов.
ModelBinder работает по принципу двусторонней привязки данных (two-way data binding). Главные элементы:
Привязка создаётся через объект конфигурации, где ключи соответствуют атрибутам модели, а значения описывают, как они будут отображаться в интерфейсе.
Для работы с ModelBinder требуется создать экземпляр
Backbone.ModelBinder и вызвать метод bind:
var binder = new Backbone.ModelBinder();
var model = new Backbone.Model({
name: 'Иван',
age: 30
});
var view = new Backbone.View({
el: '#user-form'
});
var bindings = {
name: '[name="name"]',
age: '[name="age"]'
};
binder.bind(model, view.el, bindings);
В данном примере:
model — объект с данными пользователя.view.el — DOM-элемент, содержащий поля формы.bindings — объект, где ключи соответствуют атрибутам
модели, а значения — селекторы элементов формы.После вызова bind изменения в модели автоматически
отражаются в форме, а изменения в полях формы — в модели.
ModelBinder поддерживает конвертацию данных при привязке. Это полезно, когда значение модели нужно отобразить в интерфейсе в ином формате:
var bindings = {
age: {
selector: '[name="age"]',
converter: {
modelToView: function(value) {
return value + ' лет';
},
viewToModel: function(value) {
return parseInt(value, 10);
}
}
}
};
modelToView изменяет данные модели перед
отображением.viewToModel изменяет данные из интерфейса перед
сохранением в модель.ModelBinder может автоматически слушать события change
модели и input/change элементов формы. Это
позволяет избегать ручного написания обработчиков:
model.set('name', 'Алексей'); // Поле input обновится автоматически
При необходимости можно отключить автоматическое слушание или указать собственные события:
var bindings = {
name: {
selector: '[name="name"]',
events: ['blur']
}
};
В данном случае обновление модели произойдет только после события
blur.
Для корректного управления жизненным циклом компонентов важно уметь разрывать привязку:
binder.unbind(model, view.el);
Метод unbind отключает все слушатели, связанные с
указанной моделью и элементом, предотвращая утечки памяти.
ModelBinder позволяет создавать привязки динамически, что удобно для повторяющихся элементов, например, списков:
var bindings = {
'items[].name': '.item-name',
'items[].quantity': '.item-quantity'
};
Использование массива позволяет ModelBinder автоматически синхронизировать коллекцию и соответствующие элементы интерфейса.
input,
textarea, select, а также любые элементы с
использованием кастомных преобразователей.Backbone.ModelBinder значительно упрощает работу с данными в интерфейсе, обеспечивая чистую и надежную двустороннюю синхронизацию без лишнего кода.