骨干关系的hasMany最佳实践(Backbone-relational hasmany best

2019-08-22 00:04发布

我是新来的骨干关系,我不知道什么是使用的hasMany的正确途径。

我有一个Parent其中有许多模型children (由“多”我的意思是成千上万的儿童)。 为了避免性能问题,我查询孩子通过自己的外键: /child/?parent=1而不是创造了巨大的列表child_idsParent 。 但是,看来这是不一样骨干关系的工作。

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

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

2,覆盖许多方法在骨干关系,让它处理这种情况。 我首先想到的是:

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,其他一些神奇的方式或模式或骨干框架

感谢帮助。

Answer 1:

下面是我对我目前的项目进展的解决方案。 需要注意的是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 }) });
    }
});

我已经配置采取的是作为连续的“WHERE”条款参数REST端点。 所以project.updateRelation('comments')将请求发送到/comments?project_id=4我对服务器端的一些进一步的逻辑来过滤掉东西的用户已经没有权利看。 (Laravel后端,顺便说一句)



文章来源: Backbone-relational hasmany best practices