Backbone.js 主干网有许多最佳实践
我是新来的骨干关系,我不知道什么是正确的方式使用HasMany 我有一个Backbone.js 主干网有许多最佳实践,backbone.js,foreign-key-relationship,has-many,backbone-relational,Backbone.js,Foreign Key Relationship,Has Many,Backbone Relational,我是新来的骨干关系,我不知道什么是正确的方式使用HasMany 我有一个家长模型,它有许多孩子(我所说的“许多”是指数千个孩子)。为了避免性能问题,我通过外键查询子项:/child/?parent=1,而不是在parent中创建一个庞大的子ID列表。但这似乎不是工作的方式 所以我想知道什么是正确的处理方法 1、将我的json api更改为在父级中包含子id列表,然后将数千个id作为主干发送: url = function(models) { return '/child/' + ( mode
家长
模型,它有许多孩子
(我所说的“许多”是指数千个孩子)。为了避免性能问题,我通过外键查询子项:/child/?parent=1
,而不是在parent
中创建一个庞大的子ID列表。但这似乎不是工作的方式
所以我想知道什么是正确的处理方法
1、将我的json api更改为在父级中包含子id列表,然后将数千个id作为主干发送:
url = function(models) {
return '/child/' + ( models ? 'set/' + _.pluck( models, 'id' ).join(';') + '/' : '');
}
// this will end up with a really long url: /child/set/1;2;3;4;...;9998;9999
重写主干关系中的许多方法,让它处理这种情况。我的第一个想法是:
relations: [{
collectionOptions: function(model){
// I am not sure if I should use `this` to access my relation object
var relation = this;
return {
model: relation.relatedModel,
url: function(){
return relation.relatedModel.urlRoot + '?' + relation.collectionKey + '=' + model.id;
}
}
}
}]
// This seems work, but it can not be inherent by other model
// And in this case parent will have am empty children list at beginning.
// So parent.fetchRelated() won't fetch anything, I need call this url my self.
3、只使用主干关系作为存储,然后使用集合来管理关系
4、其他一些神奇的方式或模式或主干框架
谢谢你的帮助。这是我目前项目的解决方案。请注意,Project
有许多评论、事件、文件和视频。这些关系及其反向关系在这些模型上定义:
Entities.Project = Backbone.RelationalModel.extend({
updateRelation: function(relation) {
var id = this.get('id'),
collection = this.get(relation);
return collection.fetch({ data: $.param({ project_id: id }) });
}
});
我已将REST端点配置为采用充当连续“WHERE”子句的参数。因此,project.updateRelation('comments')
将向/comments?project_id=4
发送一个请求,我在服务器端有一些进一步的逻辑来过滤掉用户无权看到的内容。(顺便说一句,Laravel后端)根据我使用关系骨干网的经验,我认为它在数千种型号上都不会表现良好。我在数百个模型中遇到了一些重大的性能问题,尤其是在加载它们时。主干关系对触发事件非常“健谈”,这取决于您的模型中有多少属性,最终每个模型触发几十个事件,乘以数千个模型。我很好奇您最终是如何处理的。这是我最终使用的方式,不是很干净,但迄今为止仍然有效。如果您知道需要获取所有,我会选择相反的关系(一个孩子知道他的父母),然后用一个单独的集合获取所有的孩子,这个集合隐式地填充主干关系存储,因此通过对服务器的一次调用来建立您的层次结构。