首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >主干-关系有许多最佳实践

主干-关系有许多最佳实践
EN

Stack Overflow用户
提问于 2013-04-12 00:46:54
回答 1查看 1.4K关注 0票数 11

我是主干关系的新手,我不确定使用HasMany的正确方式是什么。

我有一个Parent模型,它有许多children (“许多”我指的是成千上万的孩子)。为了避免性能问题,我通过它们的外键来查询子对象:/child/?parent=1,而不是在Parent中创建一个巨大的child_ids列表。但这似乎不是主干-关系工作的方式。

所以我想知道处理这个问题的正确方法是什么。

1、修改我的json接口,在parent中包含子id列表,然后发送数千个id作为Backbone-relational推荐:

代码语言:javascript
运行
复制
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

2 .覆盖主干关系中的许多方法,让它来处理这种情况。我的第一个想法是:

代码语言:javascript
运行
复制
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,一些其他神奇的方式或模式或主干框架

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-12-11 03:59:01

这是我在当前项目中的解决方案。请注意,Project hasMany注释、事件、文件和视频。这些关系及其反向关系是在这些模型上定义的:

代码语言:javascript
运行
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15954406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档