Backbone.js 创建为数组而不是集合的嵌套集合

Backbone.js 创建为数组而不是集合的嵌套集合,backbone.js,backbone-relational,Backbone.js,Backbone Relational,当我创建一个新的模型表单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) 然后我在控制台中检查发生了什么,集合没

当我创建一个新的模型表单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) 然后我在控制台中检查发生了什么,集合没有被创建:

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'.
  }]

请看关于反向关联和使用coffeescript的说明(来源:):

请注意,如果在 模型,但不要实际创建该模型的实例,它是 可能的初始化将永远不会被调用,并且 反向关联将不会初始化。扩展时可能会发生这种情况 已被覆盖,或在CoffeeScript中重新定义。请参阅设置


然后尝试按此处所述使用.setup:

查看有关反向关联和使用coffeescript的说明(from:):

请注意,如果在 模型,但不要实际创建该模型的实例,它是 可能的初始化将永远不会被调用,并且 反向关联将不会初始化。扩展时可能会发生这种情况 已被覆盖,或在CoffeeScript中重新定义。请参阅设置


然后尝试使用如下所述的.setup:

查看有关
反向关联的说明和使用coffeescript:。然后试着使用
.setup
,如下所述:这实际上解决了我的问题:)你能把它作为一个答案发布,这样我就可以接受了。谢谢请参阅关于
反向关联和使用coffeescript:。然后试着使用
.setup
,如下所述:这实际上解决了我的问题:)你能把它作为一个答案发布,这样我就可以接受了。谢谢