使用骨干关系反转数据结构

时间:2012-10-25 19:10:08

标签: javascript backbone.js data-structures backbone-relational

我正在使用骨干关系来使用嵌套数据编写应用程序。数据结构的顶层包含大部分数据(以MB为单位),但从不用作独立项;它只用于充实其相关孩子的属性(飞重模式?)。

要将所有这些数据发送到浏览器,我正在使用类似以下数据结构的内容

records = [ 
   {performerName: 'Jane', details: {composerName: 'Beethoven', ... }}, 
   ... 
] 

然后由两个模型PiecePerformance封装 - 两者都从Backbone.RelationalModel继承,但只有Performance具有如下定义的关系

relations: [
    {
        type: 'HasOne',
        key: 'piece',
        relatedModel: 'Piece',
        reverseRelation: {
            key: 'performances'
        }
    }
],

然后可以直接从原始JSON构建表演集合。

这一切都很好,但问题是我要为每个Piece发送几个数据副本(因为每个部分通常有几个性能)所以下载大小比它需要的大很多是

发送重量较轻的数据结构的最佳方式是什么(如下所示或其他一些避免大量复制的结构),但仍然需要相对轻松地创建我需要使用的表演集。

records = [ 
   {composerName: 'Beethoven', ..., performances: [array of jsons, one for each performance] 
   ... 
] 

1 个答案:

答案 0 :(得分:0)

我最终这样做的方式是将数据发送为

var data = { pieces: [
              {tune_name: 'eidelweiss', ..., performances: [{id:23}, {id:52}]} 
              ... 
             ],
             performances: [ array of performance jsons ]
           };

在棋子模型中定义以下关系

relations: [
    {
        type: 'HasMany',
        key: 'performances',
        relatedModel: 'Performance',
    includeInJSON: false,
        reverseRelation: {
            key: 'piece'
        }
    }
]

然后正常建立一个表演集和一个作品集