Для работы с коллекциями в Backbone.js импортируется
28 методов из библиотеки Underscore.js. Среди них, пожалуй, самыми востребованными являются .forEach()
, .filter()
,
.reject()
, .find()
, .without()
.
Предположим, что нужно найти в коллекции элементы, соответствующие определённому условию и уничтожить их.
var boxes = new Boxes(); // коллекция объектов
// предположим, что она уже заполнена нужными данными
var boxesToDestroy = boxes.filter(function (box) {
return box.isReadyToDestroy();
});
_.forEach(boxesToDestroy, function (box) {
box.destroy();
});
Выглядит громоздко. Всё это по тому, что методы Underscore.js возвращают массив, а не новый экземпляр коллекции.
Благо в Underscore.js есть метод .chain()
, который позволяет всё значительно упростить.
boxes.chain()
.filter(function (box) { return box.isReadyToDestroy(); })
.forEach(function (box) { box.destroy(); });
Этот код можно ещё упростить, воспользовавшись методом .invoke()
.
boxes.chain()
.filter(function (box) { return box.isReadyToDestroy(); })
.invoke("destroy");
Так можно стоить цепочки из любых операций над элементами коллекции. Если по завершению цепочки нужно будет сохранить результат выборки в переменную, то последним вызовем метод
.value()
.