0

次のコードでは、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.コーヒー

class App.Models.Item extends Backbone.RelationalModel
   initialize: ->
    ...
App.Models.Item.setup() # Set up BB Relational

問題:

item.get('subcategory') の呼び出しは期待どおりに機能し、Backbone RelationalModel オブジェクトを返します。ただし、何らかの理由でカテゴリを呼び出すと、汎用の JS オブジェクトが返されます。

item.get('サブカテゴリ').get('カテゴリ')

戻り値:オブジェクト {id: 1, title: "タイトル"}

関連している場合、console.log @subcategory.relations に「collectionKey=subcategory already exists on collection=true」というメッセージが表示されます。

4

1 に答える 1

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()
于 2012-11-23T18:07:14.167 に答える