Backbone.js-过滤集合与多个集合
Backbone.js - Filtering Collections versus multiple Collections
我正在使用backbone.js构建一个文件管理器。它是CMS(内容管理系统)Im构建的一部分,可以通过灯箱/模式窗口访问。我需要显示附加到特定内容类型(如帖子)的两个文件,以及通常的所有文件。
在这一点上,我有两个独立的集合,一个libraryCollection(所有文件)和galleryCollection(发布文件)。使用此方法遇到的第一个问题是:编辑libraryCollection中的文件并将模型更改事件绑定到视图显然不会影响galleryCollection视图。
有更好的方法吗?我想我需要对libraryCollection进行分页(就像在真正的分页中一样,只有xx个从服务器检索到的结果),这可能会使事情复杂化。除非将潜在的数千条记录加载到集合中是可以的?
更新:
最快(可能是最脏)的方法是使用内置的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);
}
});
这将同步两个集合中的模型,并且由于我将模型更改事件与呈现函数(未显示)绑定,因此视图将反映库视图和库视图中的更改。
解决您在单独的Backbone.js组件之间通信问题的一个潜在解决方案是为我们提供一个事件聚合器。在事件聚合器模式中,视图等组件将共享对聚合器的引用,聚合器是一个充当应用程序中央通信中心的对象。两个视图都与聚合器对话,而不是一个视图订阅另一个视图上的事件,聚合器将消息传递给订阅该类型消息的任何组件。
例如,libraryCollection
可能会在聚合器上激发fileAdded
事件,在消息中传递新的file
对象。您的galleryCollection
将订阅聚合器上的fileAdded
事件,并且它将在触发时采取一些操作,例如从服务器刷新自身或将传递的file
对象添加到自身。
这里有一篇优秀的博客文章,介绍了事件聚合器模式。
一次将数千张唱片加载到一个收藏集听起来像是一个麻烦的处方。
- 如何使用backbone.js从集合中获取模型名称
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- Backbone.js批量更新集合
- Backbone+RequireJS:使集合持久化
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- backbone.js可以't传递集合中的模型项's查看项目's视图
- 如何将会话数据从集合传递到视图?(Backbone JS/Coffeescapept)
- 将多级 mongodb 文档转换为 Backbone.js 模型/集合
- Backbone集合:如何从API中获取特定对象以放置在模型中
- 组织一个backbone.js集合
- 在集合中使用Backbone Deep Model
- Backbone.Model:多对多关系或将数组包装到集合中
- 数组上的句柄设置为Backbone集合
- Backbone.js视图可以有一个模型和一个集合吗
- Backbone.js-集合未定义
- Backbone.js在填充集合后调用render
- Backbone.js集合未按id成功获取
- Backbone.Collection 获得第一个 n 作为新集合
- Backbone.js在permalink集合中所有模型的唯一属性名称
- Model.extend无法更新集合.Backbone.js错误