Назначение и роль коллекций

Backbone.js предоставляет лёгкий, структурированный подход к разработке клиентских приложений на JavaScript. Одной из ключевых сущностей фреймворка являются коллекции (Collections), которые обеспечивают эффективное управление группами моделей.

Основное назначение коллекций

Коллекции служат для хранения и управления набором моделей одного типа. Они предоставляют методы для добавления, удаления, сортировки и фильтрации моделей, а также позволяют удобно работать с данными как с единым объектом, а не с отдельными экземплярами моделей.

Главные цели использования коллекций:

  • Организация логически связанных моделей.
  • Обеспечение событийного взаимодействия при изменениях моделей.
  • Упрощение работы с множественными объектами через единый интерфейс.

Создание коллекции

Коллекция создаётся через расширение базового класса Backbone.Collection. Каждая коллекция может быть привязана к конкретной модели через свойство model.

var Task = Backbone.Model.extend({
    defaults: {
        title: '',
        completed: false
    }
});

var TaskList = Backbone.Collection.extend({
    model: Task
});

var tasks = new TaskList();

В этом примере создаётся коллекция TaskList, которая будет содержать объекты модели Task.

Методы управления моделями

Коллекции предоставляют набор встроенных методов для работы с элементами:

  • add(model) – добавление одной или нескольких моделей в коллекцию.
  • remove(model) – удаление модели из коллекции.
  • get(id) – получение модели по идентификатору.
  • at(index) – получение модели по позиции в коллекции.
  • reset(models) – замена всех моделей коллекции новым набором.

Пример добавления и удаления:

var task1 = new Task({ title: 'Сделать тестирование' });
tasks.add(task1);

tasks.remove(task1);

События коллекций

Коллекции в Backbone.js активно используют событийную модель. Изменения в коллекции или её моделях вызывают события, на которые можно подписываться для обновления интерфейса или выполнения логики приложения.

Наиболее часто используемые события:

  • add – добавление модели в коллекцию.
  • remove – удаление модели.
  • reset – полная замена набора моделей.
  • sort – изменение порядка элементов коллекции.
tasks.on('add', function(model) {
    console.log('Добавлена задача:', model.get('title'));
});

Сортировка и фильтрация

Коллекции поддерживают встроенные механизмы сортировки через свойство comparator:

var SortedTasks = Backbone.Collection.extend({
    model: Task,
    comparator: 'title' // сортировка по названию
});

Методы фильтрации и поиска включают:

  • filter(predicate) – возвращает массив моделей, удовлетворяющих условию.
  • findWhere(attributes) – возвращает первую модель с указанными атрибутами.
  • where(attributes) – возвращает все модели с заданными атрибутами.
var completedTasks = tasks.where({ completed: true });

Связь коллекций с сервером

Коллекции поддерживают синхронизацию с сервером через стандартные RESTful-запросы. Основные методы:

  • fetch() – загрузка моделей с сервера.
  • create(attributes) – создание новой модели и её сохранение на сервере.
  • sync() – низкоуровневая синхронизация данных.
tasks.fetch({
    success: function(collection) {
        console.log('Загружено задач:', collection.length);
    }
});

Серверные ответы автоматически конвертируются в модели коллекции, что позволяет легко управлять данными на клиенте.

Итоговая роль коллекций

Коллекции в Backbone.js выполняют функцию организатора моделей, обеспечивая согласованность данных, события на изменения и удобные интерфейсы для сортировки, фильтрации и синхронизации. Они позволяют строить клиентские приложения с ясной архитектурой и минимальной связностью между отдельными компонентами, облегчая управление сложными наборами данных и их визуализацией.