私は何かを見失い、見落としているように感じますが、これにアプローチする方法がわかりません。また、質問する方法もよくわかりません...
まず第一に、私は AMD アプローチ (curl.js ライブラリを使用) を使用しているため、これはおそらくより困難になりますが、この問題のために AMD をあきらめていません。
「 window.bootstrap」プロパティに保存された、サーバーからのブートストラップデータのこの構造があります。
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
]
モジュール ' DataModel/Department ' は、関係のない単純な RelationalModel です。また、ここで言及されているすべてのコレクションも、次のようなモデルへの参照以外は何もない単純なものです。
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 に対応していないのかはわかりません。どんな助けでも大歓迎です。