Ember-data有很多关系不起作用(JSONAPIAdapter)

时间:2015-08-17 12:56:50

标签: ember-data

我在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}就会强制所有请求返回服务器。

我想我在某个地方误解了什么......?

0 个答案:

没有答案