我是主干关系的新手,我不确定使用HasMany的正确方式是什么。
我有一个Parent模型,它有许多children (“许多”我指的是成千上万的孩子)。为了避免性能问题,我通过它们的外键来查询子对象:/child/?parent=1,而不是在Parent中创建一个巨大的child_ids列表。但这似乎不是主干-关系工作的方式。
所以我想知道处理这个问题的正确方法是什么。
1、修改我的json接口,在parent中包含子id列表,然后发送数千个id作为Backbone-relational推荐:
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;99992 .覆盖主干关系中的许多方法,让它来处理这种情况。我的第一个想法是:
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 .只使用Backbone- relations作为Store,然后使用Collection来管理关系。
4,一些其他神奇的方式或模式或主干框架
谢谢你的帮助。
发布于 2013-12-11 03:59:01
这是我在当前项目中的解决方案。请注意,Project hasMany注释、事件、文件和视频。这些关系及其反向关系是在这些模型上定义的:
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后端,btw)
https://stackoverflow.com/questions/15954406
复制相似问题