0

试图组合一个 backone 解决方案来清理混乱的 javascript,最终是一项痛苦的努力。当然我做错了什么,但找不到任何解决方案。数据包含许多具有嵌套模型 CarsType 的车库,这些模型具有以下属性(名称、描述)。每个车库使用一次汽车类型,但可以在许多车库中找到。carType 是按车库任意排序的,因此关系表 car_type/garage 名称包是这样定义的 | 编号 | 车库 ID | car_type_id | 职位 |

每个 carType 都分配给许多机械师。每个机械师都可以在许多车库工作。所以第三个嵌套级别是关系表 mechanic_pack |mechanic_id|pack_id|

后端是输出 Json 的 rails 3.1。

Garage = Backbone.RelationalModel.extend({
    relations: [
        {
            type: Backbone.HasMany, 
            key: 'Packs',
            relatedModel: 'pack',
            collectionType: 'Packs',
            reverseRelation: {
              key: 'garage',
                includeInJSON: 'id' 
            }
        }
    ],

    initialize: function(attributes) {
        this.fetchRelated("packs");
      },

    url : function() {
      var base = 'garages';
      if (this.isNew()) return base;
      return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
    }
///... more method ...

});

packs 集合在另一个文件中定义

Packs= Backbone.Collection.extend({
    model: Pack, 
    url: '/packs/list/:garage_id'
});

模型被正确加载,但 fetchRelated 不获取也不抛出任何错误。Firebugs 中的断点显示toFetch始终未定义

fetchRelated: function( key, options ) {
  options || ( options = {} );
  var rel = this.getRelation( key ),
  keyContents = rel && rel.keyContents,
  toFetch = keyContents && _.select( _.isArray( keyContents ) ? keyContents : [ keyContents ], function( item ) {
  var id = _.isString( item ) || _.isNumber( item ) ? item : item[      rel.relatedModel.prototype.idAttribute ];
  return id && !Backbone.Relational.store.find( rel.relatedModel, id );
  }, this );
  if ( toFetch && toFetch.length ) { 
......

我应该如何调用 fetchRelated?

第二个问题:当请求车库时,rails 会发送嵌套模型的完整树。有没有办法从最初的 json 答案中填充 backones 嵌套模型?并能够使用自己的视图来操作每个嵌套模型?

4

1 回答 1

0
  initialize: function(attributes) {
    this.fetchRelated("Packs");
  }

此外,relatedModel 'pack' 和与您的集合关联的模型之间似乎存在不一致:Pack

如果它仍然不起作用,您是否尝试为您的密钥指定一个与您的 collectionType 不同的名称?

于 2011-12-18T18:31:05.043 回答