我觉得有点失落,忽视了一些东西,但我不确定如何接近这个,甚至不太确定如何问…
首先,我使用AMD的方法(使用curl.js库),这可能会使这更困难,但我不会因为这个问题放弃AMD。
我有这个结构的引导数据从服务器,存储在'窗口。引导的财产。
Departments = [
{"Id": 1, "Name": "Early Collections" },
{"Id": 2, "Name": "Collections" }
]
Blocks = [
{"Id": 1, "Code": "K", "Department": 1 },
{"Id": 2, "Code": "A", "Department": 2 }
]
现在我对这个方法感到困惑。这是我的'DataModel/Block'模块:
define [
'Collection/DepartmentCollection'
'DataModel/Department'
], (DepartmentCollection, Department) ->
Backbone.RelationalModel.extend
relations: [
type: Backbone.HasOne
key: 'Department'
relatedModel: Department
collectionType: DepartmentCollection
]
Module 'DataModel/Department'只是普通的RelationalModel,没有任何关系。此外,这里提到的每个Collection也都是简单的,除了引用Model之外没有任何其他内容,就像这样:
define ['DataModel/Department'] , (Department) ->
Backbone.Collection.extend
model: Department
最后,这里是Bootstrap模块,看起来像这样:
define [
'DataModel/Department'
'Collection/DepartmentCollection'
'DataModel/Block'
'Collection/BlockCollection'
] , (Department, DepartmentCollection, Block, BlockCollection) ->
model = Backbone.RelationalModel.extend
relations: [
type: Backbone.HasMany
key: 'Departments'
relatedModel: Department
collectionType: DepartmentCollection
,
type: Backbone.HasMany
key: 'Blocks'
relatedModel: Block
collectionType: BlockCollection
]
data = window.bootstrap || {}
boot = new model
boot.get('Departments').reset data.Departments || []
boot.get('Blocks').reset data.Blocks || []
return boot
我希望它会为这些块找到部门并在那里分配模型,但是调用
console.debug ins.get('Blocks').at(0).get('Department')
…
但这不是结束。我也将有其他实体从服务器与部门的关系。我想看到,它会自动从引导中附加Department,这样我就可以透明地使用它了。
我不知道是我误解了这个关系库,还是它还没有为AMD准备好。
潜在的作用域/名称解析问题?console.debug(window.Block, window.Department)
的输出是什么?如果您确实获得了模型类型,那么将relatedModel
作为字符串给出可能会有所帮助,例如relatedModel: "Department"
。
看起来问题解决了。问题在一行代码中…
Backbone.Model.prototype.idAttribute = "Id"
我忘了我正在使用PascalCase标识符的对象属性。