1

コレクションとして解析する必要があるネストされた属性を使用して、json 形式の新しいモデルを作成するときに問題が発生します。ここで、エラーに到達する方法を示します。

(任意の助けをいただければ幸いです)

1)このようなユーザーを作成します

user = new App.Models.User( {"email":"tom@gmail.com","id":1,"user_cities_attributes":[{"city_id":431,"user_action":"to-visit","user_id":1}] }

2) コンソールで何が起こったのかを確認すると、コレクションが作成されませんでした。:S

user.get('user_cities')
> undefined # where is my collection?! :(
user.get('user_cities_attributes')
> [Object] # mmm weird...

コレクションに新しいモデルを追加しようとすると...

cities = new App.Collections.CitiesCollection()
cities.fetch()

userCity = new App.Models.UserCity( { user: user, city: cities.first(), user_action: "to-visit" } )

今ではすべてがうまくいっているように見えます...何が起こったのですか????

user.get('user_cities')
> Backbone.Collection {length: 20, models: Array[20], _byId: Object, model: function, user: User…}
user.get('user_cities_attributes')
undefined

モデル

class App.Models.User extends Backbone.RelationalModel
  paramRoot: 'user'
  urlRoot: 'users'

  defaults:
    name: null

class App.Models.UserCity extends Backbone.RelationalModel
  paramRoot: 'user_city'
  urlRoot: 'user_cities'

  defaults:
    user_action: null

  relations: [{
    type: Backbone.HasOne,
    key: 'user',
    relatedModel: 'App.Models.User',
    collectionType: 'App.Collections.UsersCollection',
    keySource: 'user_id',
    includeInJSON: 'id',
    reverseRelation: {
      key: 'user_cities',
      keySource: 'user_cities_attributes',
      includeInJSON: 'id'
    }
  },
  {
    type: Backbone.HasOne,
    key: 'city',
    relatedModel: 'App.Models.City',
    collectionType: 'App.Collections.CitiesCollection',
    includeInJSON: 'id',
    keySource: 'city_id',
    reverseRelation: {
      key: 'users',
      includeInJSON: 'id'
    } 
  }]

class App.Models.City extends Backbone.RelationalModel
  paramRoot: 'city'
  urlRoot: 'cities'

  defaults:
    name: null

  relations: [{
    type: Backbone.HasMany,
    key: 'places',
    relatedModel: 'App.Models.Place',
    collectionType: 'App.Collections.PlacesCollection',
    keySource: 'places_attributes',
    # parse: true,
    includeInJSON: 'id',
    autoFetch: true,
    reverseRelation: {
      key: 'city',
      includeInJSON: 'id'
    }
      # 'relatedModel' is automatically set to 'Zoo'; the 'relationType' to 'HasOne'.
  }]
4

1 に答える 1

1

reverseRelation と coffeescript の使用に関するメモを見てください ( http://backbonerelational.org/#relations-reverseRelationから):

モデルでリレーション (および reverseRelation) を定義しても、実際にはそのモデルのインスタンスを作成しない場合、initializeRelations が呼び出されず、reverseRelation が初期化されない可能性があることに注意してください。これは、extend がオーバーライドされた場合、または CoffeeScript のように再定義された場合に発生する可能性があります。セットアップを参照してください。

次に、ここで説明されているように .setup を使用してみてください: http://backbonerelational.org/#RelationalModel-setup

于 2013-08-23T15:00:20.313 に答える