Как получить вложенную коллекцию в 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? Что мне не хватает...?

Спасибо.

Вот код моделей:

клиент.js.кофе

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'

person tomasbarrios    schedule 10.04.2013    source источник


Ответы (1)


Столкнулся с похожей проблемой, ответа пока нет. Но, возможно, я смогу поделиться с вами некоторыми мыслями.

Я предполагаю, что ваша структура 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 в качестве URL-адреса для ClientContactsCollection, поэтому вы вернули все контакты, потому что /client_contacts - это запрос для всех контактов. Вы можете проверить подробности на http://backbonerelational.org/#example-person.

Если вы не хотите включать идентификатор контактов в /clients/, тогда мы сталкиваемся с той же проблемой: в реляционной системе есть много лучших практик

person xzhang    schedule 11.04.2013
comment
Наконец, я перешел с магистрально-реляционного подхода на этот подход tutsplus.com/lesson/nested-collections , это работает довольно хорошо до сих пор. - person tomasbarrios; 12.04.2013