Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干网有许多最佳实践_Backbone.js_Foreign Key Relationship_Has Many_Backbone Relational - Fatal编程技术网

Backbone.js 主干网有许多最佳实践

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

我是新来的骨干关系,我不知道什么是正确的方式使用HasMany

我有一个
家长
模型,它有许多
孩子
(我所说的“许多”是指数千个孩子)。为了避免性能问题,我通过外键查询子项:
/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后端)

根据我使用关系骨干网的经验,我认为它在数千种型号上都不会表现良好。我在数百个模型中遇到了一些重大的性能问题,尤其是在加载它们时。主干关系对触发事件非常“健谈”,这取决于您的模型中有多少属性,最终每个模型触发几十个事件,乘以数千个模型。我很好奇您最终是如何处理的。这是我最终使用的方式,不是很干净,但迄今为止仍然有效。如果您知道需要获取所有,我会选择相反的关系(一个孩子知道他的父母),然后用一个单独的集合获取所有的孩子,这个集合隐式地填充主干关系存储,因此通过对服务器的一次调用来建立您的层次结构。