2011-10-17 12 views
1

私は一種の失われた感じ、何かを望むが、私は聞いてどのように非常に多くのことを確認これに近づいてさえいないするかどうかはわからない...BACKBONE.JS +リレーショナル+ AMD ...ブートストラップ、関係演算

まず第一に、私は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 /ブロック' モジュールです:

define [ 
    'Collection/DepartmentCollection' 
    'DataModel/Department' 
], (DepartmentCollection, Department) -> 

    Backbone.RelationalModel.extend 
     relations: [ 
      type: Backbone.HasOne 
      key: 'Department' 
      relatedModel: Department 
      collectionType: DepartmentCollection 
     ] 

モジュール 'のDataModel /部門は' いかなる関係のない単なるRelationalModelです。また、ここではすべての言及コレクションは、このようなモデルも参照何でもないプレーンです:

define ['DataModel/Department'] , (Department) -> 
    Backbone.Collection.extend 
     model: Department 

そして最後に、ここでは次のようになり、ブートストラップモジュール、行く:私はこれに期待する

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の準備ができていないのか分かりません。どんな助けもありがとうございます。

+0

"AMDの準備ができていますか?"したがって、バックボーン・リレーショナルは不可能です。私はあなたのプロセッサブランドとは何の関係もないと仮定しています;)。 – Paul

+0

[CommonJS proposal](http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition)をお読みください。とにかく、AMDの準備ができているように見える、それはちょうど私のエラーだった。あなたを迷惑して申し訳ありません:)そしてあなたのこの素晴らしい図書館に感謝します。多くの作業を省きます。 – FredyC

答えて

0

これは解決したようです。問題は、私は、私は、オブジェクトのプロパティのためのPascalCaseの識別子を使用しています忘れてしまった... 1行のコードで

Backbone.Model.prototype.idAttribute = "Id" 

ました。すべてが今は大丈夫です。

0

潜在的なスコープ/名前解決の問題? console.debug(window.Block, window.Department)の出力はどのくらいですか?モデルタイプを取得した場合は、relatedModelを文字列として指定してください。 relatedModel: "Department"

+0

「Department」のようなオブジェクトがグローバルコンテキストに存在しないときに、relatedModelにstringを使用する方法はありますか?これはAMDの目的であり、アプリケーションの一部の分野のみを目的としたオブジェクトでグローバルな文脈を混乱させるわけではありません。 – FredyC

関連する問題