主干:将模型从一个集合添加到另一个集合
Backbone: adding model from one collection to another
这是我现在拥有的一般结构:
具有视图"A"的集合"A"
要添加模型,可以打开一个模态并从列表中进行选择。模态是它自己的视图"B",绑定到它自己的集合"B"。视图"B"是在单击事件上从视图"A"实例化的。
我本来打算用"myParent"属性初始化视图"B",所以当从集合B中选择模型时,我可以在视图B:中这样说
this.myParent.collection.add(newModel).
我知道这会奏效,但这种耦合是不是太紧密了,不需要?这个有好的模式吗?我想让几个不同的事件和触发因素在不同的地方传播,但这似乎只是使事情复杂化,没有太多附加值。
我在一个应用程序中遇到了一个类似的问题,该应用程序在表中列出了一组可选模型。根据所选的模型,另一个视图需要确定向用户显示哪些按钮。
在这种情况下,我选择了事件驱动的方法。每次选择视图a中的模型时,我都会触发视图B侦听的事件,并将该模型添加到集合B中。
对于您的情况,可能看起来像这样:
// Your collection view.
var ViewA = Backbone.View.extend({
initialize: function(){
Backbone.Events.on('modelSelected', this.onModelSelected, this);
this.listenTo(this.collection, 'add', this.renderList);
},
onModelSelected: function(model){
this.collection.add(model);
}
renderList: function(){
// Draw your collection
}
// Do some clean up of events
remove: function(){
Backbone.Events.off('modelSelected', this.onModelSelected, this);
Backbone.View.prototype.remove.call(this);
}
});
// Modal View
var ViewB = Backbone.View.extend({
initialize: function(){
this.collection = new YourCollection();
this.listenTo(this.collection, 'sync', this.renderCollection);
this.collection.fetch();
},
render: function(){
// Render your modal
return this;
},
renderCollection: function(){
// Render your collection
},
//
modalSubmit: function(){
var model = this.getSelectedModel();
Backbone.Events.trigger('modelSelected', modal);
this.close();
}
});
我应该注意到,这附带了一些注意事项。首先,我建议选择一个健壮的名称空间事件命名方案。这只是一个例子。其次,从initialize函数获取数据通常并不理想,但为了简洁起见,我省略了控制器的概念。
相关文章:
- Meteor.js只更新一个参数,而不是整个集合
- 如何查找流星集合中最后一个元素/对象的id
- 包含一个集合的1到3个成员但其中一个成员不能单独存在的正则表达式
- 将一个对象集合映射到汇总集合的单个对象
- 如何将两个集合转换为一个集合
- Meteor:访问另一个集合,每个块中有一个id
- 主干-用一个请求替换整个集合
- 如何计算mongodb中两个集合中一个字段的不同值的数量
- 组织一个backbone.js集合
- 如何在集合中指定模型的一个属性
- Backbone.js视图可以有一个模型和一个集合吗
- 另一个集合视图中的集合视图
- 如何使用Angular 2服务提供包含指向另一个资源的链接/ids的资源集合
- Backbone.Collection 获得第一个 n 作为新集合
- Mongo-Aggregate:如何与另一个集合中的字段进行比较
- Meteor - 将 mongodb 查询分配给变量并将其插入到另一个集合
- 在 Backbone.js 中为集合中的一个元素创建详细信息页面
- 基于 MongoDB 中另一个集合中的数据查询一个集合中的数据
- 流星 - 将数据从一个集合移动到另一个集合
- 更改一个对象的可观察属性会更改集合中所有对象的属性