如何在Backbone-Relational中获取嵌套集合



我试图获取所有客户端,谁有嵌套的客户端联系人(人)。我有一些麻烦获得客户联系收集谁属于客户/公司。如果我想要收藏,我什么也得不到。顺便说一句,我在骨干和相关的东西上是新手。

下面是我在控制台运行的代码,以显示我的问题。

c = new SpencerGrafica.Models.Client({id:1})
c.fetch()
c.toJSON()
Object {id: 1, name: "Name", contacts: Array[0], …}
c.get('contacts').toJSON()
[] # (There should be ONE result, as I set this relation in rails console)

如果我运行c.get('contacts').fetch(),我得到所有的"客户-联系人",而不仅仅是那些相关的。可能是URL问题?我错过了什么?

谢谢。

以下是模型的代码:

client.js.coffee

class SpencerGrafica.Models.Client extends Backbone.RelationalModel
  paramRoot: 'client'
  urlRoot: 'clients'
  defaults:
    id: null
    name: null
  relations: [{
    type: Backbone.HasMany,
    key: 'contacts',
    relatedModel: 'SpencerGrafica.Models.ClientContact',
    collectionType: 'SpencerGrafica.Collections.ClientContactsCollection',
    autoFetch: true,
    reverseRelation: {
      key: 'client',
      keySource: 'client_id'
    }
  }] 
class SpencerGrafica.Collections.ClientsCollection extends Backbone.Collection
  model: SpencerGrafica.Models.Client
  url: '/clients'

ClientContact.js.coffee

class SpencerGrafica.Models.ClientContact extends Backbone.RelationalModel
  paramRoot: 'client_contact'
  urlRoot: 'client_contacts'
  defaults:
    name: null
    email: null
    phone: null
class SpencerGrafica.Collections.ClientContactsCollection extends Backbone.Collection
  model: SpencerGrafica.Models.ClientContact
  url: 'client_contacts'

我也面临着类似的问题,但还没有得到答案。但是我也许可以和你分享一些想法。

我猜你的json结构是:
/clients/: {id: 1, name: "Name"}
/client_contacts/: [{id: 1, client: 1}, {id: 2, client: 1}]

则需要将/clients/改为{id: 1, name: "Name", contacts: [1, 2]},让主干关系计算出关系

另一个问题是您使用/client_contacts作为ClientContactsCollection的url,这就是为什么您得到所有联系人的原因,因为/client_contacts是所有联系人的请求。您可以查看http://backbonerelational.org/#example-person了解详细信息。

如果你不想在/clients/中包含联系人id,那么我们将面临同样的问题:主干关系有许多最佳实践

相关内容

  • 没有找到相关文章

最新更新