在下面的代码中,我建立了3个多/属于关系。
类别> 子类别>项目
类别.js.咖啡:
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.咖啡:
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
项目.js.咖啡
class App.Models.Item extends Backbone.RelationalModel
initialize: ->
...
App.Models.Item.setup() # Set up BB Relational
问题:
调用 item.get('subcategory') 按预期工作,返回一个 Backbone RelationalModel 对象。 但是,由于某种原因,调用类别会返回一个通用的 JS 对象。
item.get('subcategory').get('category')
返回:对象 {id: 1, title: "the title"}
如果相关,控制台.log @subcategory.relations显示消息"collectionKey=subcategory 已存在于collection=true"。
解决了!
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()