1

私は何かを見失い、見落としているように感じますが、これにアプローチする方法がわかりません。また、質問する方法もよくわかりません...

まず第一に、私は 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 に対応していないのかはわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

0

解決したようです。問題は1行のコードにありました...

Backbone.Model.prototype.idAttribute = "Id"

オブジェクトのプロパティにPascalCase識別子を使用しているのを忘れました。今のところすべて問題ないようです。

于 2011-10-19T07:22:49.460 に答える
0

潜在的なスコーピング/名前解決の問題? どのような出力が得られconsole.debug(window.Block, window.Department)ますか? relatedModelモデル タイプを取得する場合は、 を文字列として指定すると役立つ場合がありますrelatedModel: "Department"

于 2011-10-18T21:32:15.110 に答える