Ember.js Embedded与许多关系并不总是有效的
我有一个Ember.js Embedded与许多关系并不总是有效的,ember.js,ember-data,relationship,Ember.js,Ember Data,Relationship,我有一个ticket模型,它有一个ticket\u持有者的属性,这是一个具有许多关系的属性 ticket_holders: DS.hasMany('ticket-holder'), ticket holder型号有一个ticket属性,定义为belongsTo ticket: DS.belongsTo('ticket') 在ticket序列化程序中,我定义了EmbeddedRecordsMixin,并像这样设置attrs属性 export default DS.RESTSerializer.
ticket
模型,它有一个ticket\u持有者的属性
,这是一个具有许多关系的属性
ticket_holders: DS.hasMany('ticket-holder'),
ticket holder
型号有一个ticket
属性,定义为belongsTo
ticket: DS.belongsTo('ticket')
在ticket
序列化程序中,我定义了EmbeddedRecordsMixin
,并像这样设置attrs
属性
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs: {
ticket_holders: {embedded: 'always'}
},
...
API中的示例ticket
如下所示
{
"eid":"5060",
"user_id":"13193",
"ticket_id":"612",
"ticket_purchase_code":"1ab9e0f20178220a75d5d2ca18322efa",
"ticket_purchase_behalf_name":null,
"ticket_purchase_behalf_email":null,
"ticket_name_alias":null,
"ticket_cost":"0.00",
"ticket_ticketing_time":"2015-11-17 11:24:32",
"ticket_qty":"1",
"ticket_total":"1.00",
"ticket_paid":"1",
"ticket_transaction_id":"noch_5060564b54c0c42ffy0M8tpk",
"ticket_validation_phrase":"",
"ticket_pay_type":"card",
"ticket_qty_redeemed":"0",
"ticket_refunded":"0",
"ticket_promo_code_used":"",
"ticket_name":"Ticket #2",
"ticket_purchase_user_name":"Tony Stark",
"ticket_holders":[
{
"holder_code":"hc_299dc35e",
"holder_user_id":"0",
"holder_id":"8181",
"holder_name":"Jordan again",
"holder_email":"Riser.jordan@gmail.com",
"holder_phone":"",
"holder_paddle_number":"4888",
"holder_rsvp":"0",
"holder_redeemed":"1",
"holder_last_updated":"2016-05-13 19:07:13",
"ticket_qrcode":"barcode\/barcode.processor.php?encode=QRCODE&bdata=&qrdata_type=link&qr_link_link=http%3A%2F%2Fbidr.co%2Fl%2F8qexEa&height=500&scale=2&bgcolor=%23ffffff&color=%231B3448&file=&folder&type=png&Genrate=Create+Barcode&ECLevel=L&margin=",
"ticket_pdf":"http:\/\/bidr.co\/ticket\/pdf_ticket.php?s1=1ab9e0f20178220a75d5d2ca18322efa&s2=hc_299dc35e"
},
...
]
}
ticket
的主密钥设置为primaryKey:“ticket\u purchase\u code”,
因此,在存储方法的normalize函数中,我使用循环遍历每个票证
抓取它的票证购买代码
,然后循环遍历每个票证持有人
数组,并将每个调用的票证购买代码
的新属性设置为我从其父级获得的属性票据
记录
当我尝试在票证
上循环时,似乎并非总是将票证持有人
归因于票证
,然后在模板中它是票证持有人
{{#each tickets as |purchase|}}
...
{{#each purchase.ticket_holders as |ticket|}}
...
{{/each>
{{/each}}
有时我在每张票下只看到一个持票人
,有时我在每张票下看到所有正确的持票人
,但更一致的是,我在每张票下只看到一个持票人
我的人际关系建立得不对吗
我还尝试将我在票证
序列化程序中循环的每个票证持有者
上的票证购买码
更改为票证id
,以查看这是否可行,但它也不能正常工作。我以前遇到过这个问题。对我来说,情况是,我有两张票,都有相同的持票人,即,“票号”:“612”
和“票号”:“633”
都有“持票人号”:“8181”
。由于属于可怜的持有者id:“8181”
只能链接到一张票证,因此只有最后一张加载到具有持有者id:“8181”
的余烬数据中的票证才能留住他
解决方案
试着在票夹中注释掉DS.belongsTo('ticket')
,看看它们是否都像您期望的那样加载
// Try commenting the ling below out
ticket: DS.belongsTo('ticket')
比如在这个,
我注释了与公司的关系:DS.belongsTo('company')
,因此Matt H将出现在前两个公司中。如果你把这条线放回去,你会发现他只会继续属于约翰鞋修理公司,因为它会在Housing4Hope之后加载到余烬数据中。我会试一试,我也会将两个余烬数据集合并在一起,这两个数据集彼此相似,但不一定相同。也就是说,一个调用将拥有另一个调用的所有记录,但它可能还有一些看起来相似的记录,因此我使用computed.uniq
来确保没有重复的记录,不确定,但这可能也与此有关。我确保两组看起来完全相同,并删除了持票人
中的关系以查看。我不能一直让它崩溃,但到目前为止,每次我刷新数据时,它似乎都在工作。是的,玩一下,让我知道。
App.Contact = DS.Model.extend({
name : DS.attr('string'),
// Turn the below on to see your problem. Matt H belongsTo 2 different companies
//company : DS.belongsTo('Company')
});