0

在下面的代码中,我建立了 3 个 has-many/belongs-to 关系。

类别 > 子类别 > 项目

Category.js.coffee:

class App.Models.Category extends Backbone.RelationalModel
  relations: [{
        type: Backbone.HasMany
        key: 'subcategories'
        relatedModel: 'App.Models.Subcategory'
        collectionType: 'App.Collections.Subcategories'
        reverseRelation: {
            key: 'category',
            includeInJSON: 'id'
        }
    }]

App.Models.Category.setup() # Set up BB Relational

子类别.js.coffee:

class App.Models.Subcategory extends Backbone.RelationalModel
  relations: [{
      type: Backbone.HasMany
      key: 'items'
      relatedModel: 'App.Models.Item'
      collectionType: 'App.Collections.Items'
      reverseRelation: {
          key: 'subcategory',
          includeInJSON: 'id'
      }
  }]

App.Models.Subcategory.setup() # Set up BB Relational

Item.js.coffee

class App.Models.Item extends Backbone.RelationalModel
   initialize: ->
    ...
App.Models.Item.setup() # Set up BB Relational

问题:

调用 item.get('subcategory') 按预期工作,返回一个 Backbone RelationalModel 对象。但是,由于某种原因,调用 category 会返回一个通用的 JS 对象。

item.get('子类别').get('类别')

返回:对象{id:1,标题:“标题”}

如果它是相关的,console.log @subcategory.relations 会显示消息“collectionKey=subcategory already exists on collection=true”。

4

1 回答 1

0

解决了!

Backbone-Relational 通过使用 setup() 方法解决了咖啡脚本扩展语法的问题,如上所示。

我的问题是我的 Category.js.coffee 在我的 Item.js.coffee 之前被初始化,因此 setup() 调用的反向关系无法添加到模型中。

为了解决这个问题,我将所有 setup() 调用按关系依赖关系的顺序移到了我的主干初始化程序(一旦定义了所有对象):

window.App =
  init: (options) -> 
    # Set up BB Relational
    GearSwap.Models.Item.setup()
    GearSwap.Models.Category.setup()
    GearSwap.Models.Subcategory.setup()
于 2012-11-23T18:07:14.167 回答