Я создаю файловый менеджер, используя backbone.js. Это часть CMS (системы управления контентом), которую я создаю, и доступ к ней осуществляется через лайтбокс / модальное окно. Мне нужно показать как файлы, прикрепленные к определенному типу контента (например, сообщение), так и все файлы в целом.
На данный момент у меня есть две отдельные коллекции: libraryCollection (все файлы) и galleryCollection (файлы записей). Первая проблема, с которой я столкнулся при использовании этого метода: редактирование файла в libraryCollection и привязка события изменения модели к представлению, очевидно, не влияет на представление galleryCollection.
Есть ли лучший способ сделать это? Я думаю, мне понадобится нумерация страниц для библиотеки LibraryCollection (как в случае РЕАЛЬНОЙ нумерации страниц только с количеством хх результатов, полученных с сервера), и это может усложнить ситуацию. Разве загрузка тысяч записей в коллекцию - это нормально?
Обновление:
Самым быстрым (возможно, самым грязным) методом было использование встроенной системы Backbone.Events. Пример кода:
var aggregator = {};
_.extend(aggregator, Backbone.Events);
aggregator.on("fileUpdated", function(model){
if(app.libraryCollection && app.galleryCollection){
libraryModel = app.libraryCollection.get(model.get("id"));
galleryModel = app.galleryCollection.get(model.get("id"));
libraryModel.set(model.attributes);
galleryModel.set(model.attributes);
}
});
Затем в редакторе:
window.EditorView = Backbone.View.extend({
saveModel: function(){
self = this;
form = $(this.el).find("form").serializeArray();
_.each(form, function(field){
self.model.set(field["name"], field["value"]);
});
self.model.save();
aggregator.trigger("fileUpdated", this.model);
}
});
Это синхронизирует модели в обеих коллекциях, и поскольку я связал событие изменения модели с функцией рендеринга (не показана), представление отражает изменения как в представлении библиотеки, так и в представлении галереи.