Backbone-Relational:Fetch返回通用JS对象

时间:2012-11-23 06:13:45

标签: backbone.js coffeescript backbone-relational

在下面的代码中,我建立了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

Subcategory.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( '子类别')。得到( '类别')

返回: Object {id:1,title:“title”}

如果它是相关的,console.log @ subcategory.relations显示消息“collectionKey = subcategory已经存在于collection = true”。

1 个答案:

答案 0 :(得分:0)

解决!

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

我的问题是我的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()
相关问题