在下面的代码中,我建立了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”。
答案 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()