我在Ember-CLI v.1.13.8中使用了Ember-Data v.1.13.9。我正在使用JSONAPIAdapter适配器。
我遇到hasMany关系问题。我可以从Ember检查员看到主记录和相关记录都被加载到商店中。但是,这种关系似乎并不存在,因为我无法访问模板中的相关记录详细信息。
模型/ invoice.js
export default DS.Model.extend(
{
invNum : DS.attr('string'),
created : DS.attr('date', {defaultValue: function() { return new Date(); }}),
clientId : DS.attr('number'),
userId : DS.attr('number'),
details : DS.hasMany('invoice-detail', {async : true}),
});
模型/发票detail.js
export default DS.Model.extend(
{
invoice : DS.belongsTo('invoice', {async : true}),
detail : DS.attr('string'),
amount : DS.attr('number'),
vat : DS.attr('number'),
});
我的JSON数据:(网址:/ accounts / invoices / 1)
{
"data": {
"id": 1,
"attributes": {
"inv-num": "A0011000001",
"created": "November, 01 2000 00:00:00",
"user-id": 2,
"client-id": 14,
"relationships": {
"details": {
"data": [
{
"id": 1,
"type": "invoice-detail"
}
]
}
}
},
"type": "invoice"
},
"included": [
{
"id": 1,
"attributes": {
"amount": 3000,
"detail": "Stage 1 delivery of 3Com Reseller Locator to\r\nFoundation Network LTD",
"vat": 525
},
"type": "invoice-detail"
}
]
}
我已尝试直接访问详细信息相关数组:
{{#each model.details as |detail index|}}
{{index}} : {{detail.detail}} £{{detail.amount}} (£{{detail.vat}} vat)
{{/each}}
使用控制器: invoice / controller.js
export default Ember.Controller.extend({
invoiceDetails : function()
{
var invoice = this.get("model");
var details = invoice.get("details");
Ember.Logger.log("invoiceDetails",invoice,details);
return details;
}.property('model.details'),
});
和
{{#each invoiceDetails as |detail index|}}
{{index}} : {{detail.detail}} £{{detail.amount}} (£{{detail.vat}} vat)
{{/each}}
也没有向我提供我需要的数据。
我做错了什么?
我遇到的第二个相关问题是我无法从服务器重新加载数据。 {reload:true}没有任何区别。查看网络流量,我可以看到没有对服务器进行第二次和以后访问该路由的呼叫。
发票/ route.js
export default Ember.Route.extend({
model: function(params) {
return this.store.findRecord('invoice', params.id, { reload: true });
}
})
我真正想要做的是有一条路线可以检索发票清单(没有详细信息部分 - 因此我可以快速检索,因为我不需要列表页面上的详细信息)。然后,当我深入查看特定发票时,请拨打服务器以获取该发票的完整详细信息。我的计划是使用shouldReloadRecord函数来检查我是否有附加到此记录的详细信息。如果是这样,请使用商店中的副本,如果没有,请转到服务器,然后覆盖我最初获得的有限“列表”记录。作为这个方向的垫脚石,我认为只要在路线中设置{reload:true}就会强制所有请求返回服务器。
我想我在某个地方误解了什么......?