我正在尝试获取所有已嵌套客户端连接(人员)的客户端。我在获取属于客户/公司的客户联系人集合时遇到了一些麻烦。如果我试图获得收藏品,我什么也得不到。顺便说一下,我是骨干和相关的新手。
以下是我在控制台上运行以显示问题的代码。
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()我得到的所有“客户联系人”不仅仅是那些相关的人。可能是网址问题?我错过了什么......?
感谢。
以下是模型的代码:
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'
答案 0 :(得分: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
作为ClientContactsCollection
的网址,这就是您恢复所有联系人的原因,因为/client_contacts
是对所有联系人的请求。
很多人想查看http://backbonerelational.org/#example-person了解详情。
如果您不希望/clients/
中包含联系人ID,那么我们将面临同样的问题:Backbone-relational hasmany best practices