如何在ember.js视图上正确加载多个模型

如何在ember.js视图上正确加载多个模型,ember.js,ember-data,Ember.js,Ember Data,(Ember 2.14)我有一个产品编辑路线的子视图,我想在其中显示与另一个模型(许可证)的关系。当然,产品有许多许可证和属于产品的许可证。我还有一个组件来添加关系。据我所知,我应该在路由的模型函数中加载来自组件外部的所有数据 当我在应用程序中从其他地方转到路线时,它会显示正确的关系,但是当我直接转到页面时,只有第一个许可证显示为关系 以下是produits.edit.document路径的模型: import Ember from 'ember'; export default Ember.

(Ember 2.14)我有一个产品编辑路线的子视图,我想在其中显示与另一个模型(许可证)的关系。当然,
产品有许多许可证
属于产品的许可证
。我还有一个组件来添加关系。据我所知,我应该在路由的模型函数中加载来自组件外部的所有数据

当我在应用程序中从其他地方转到路线时,它会显示正确的关系,但是当我直接转到页面时,只有第一个许可证显示为关系

以下是produits.edit.document路径的模型:

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    const produit = this.modelFor('produits.edit')
    return Ember.RSVP.hash({
      allLicences: this.get('store').findAll('licence'),
      produit: produit
    });
  }
});
produits.edit管线的模型:

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord('produit', params.produit_id);
  }
license.js:

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr(),
  produits: DS.hasMany('produit'),
  licenceVersions: DS.hasMany('licence/licence-version')
});
产品型号:

import Ember from 'ember';
import DS from 'ember-data';
import { modelAction } from 'ember-custom-actions';

export default DS.Model.extend({
  nom: DS.attr(),
  resume: DS.attr(),
  description: DS.attr(),
  description_sec_title: DS.attr(),
  illustration: DS.attr(),
  isPublished: DS.attr('boolean'),
  famille: DS.belongsTo('famille'),
  licences: DS.hasMany('licence'),
  addLicence: modelAction('licences', {method: 'POST'}),
  anyLicence: Ember.computed('licences.[]', function() {
    return this.get('licenses').length > 0;
  })
});
produits.edit.documents是提供来自produit的许可证的模板的一部分

{{#each model.produit.licences as |licence|}}
        <tr>
          <td>{{licence.name}} </td>
          <td>{{interface/remove-button deleteElement=(action "removeLicence" licence model.produit model.produit.licences)}}</td>
          <td></td>
        </tr>
{{/each}}
{{{#每个model.produit.licenses作为| license}
{{license.name}
{{interface/remove button deleteElement=(操作“removeLicence”license model.produit model.produit.licenses)}
{{/每个}}
在这两种情况下,从应用程序访问或重新加载应用程序,ember检索产品和许可证索引。在一种情况下,他将仅显示产品的第一个许可证,在另一种情况下,他将显示与产品相关的所有正确许可证

在这个路线模型中我做错了什么

编辑: 现在,如果

  • 许可证包含在来自服务器的产品(produit)JSON响应中

  • 对API的JSON调用是代码200而不是304。在这两种情况下,浏览器工具都是相同的。它只适用于Firefox。有时,第一次试验失败(200),但在第二次试验(304)时工作,并且在随后的重新加载(304)中失败

    • 您可以做的一件事是同步加载关系。为此,您可以像这样更改您的关系
      licenses:DS.hasMany('license',{async:false})
      。现在,在执行查询时,必须包含关联,例如
      this.store.findRecord('produit',params.produit_id,{include:'licenses')
      。您可以像这样加载更多关联,
      {include:'licenses.license\u versions,famille'}
      。查看更多信息


      您可能还可以在您的关联中使用
      {inverse:“licenses'}
      ,如您所见。

      您还可以显示许可证的模型定义(特别是定义关系的部分)以及当您直接点击该路径时后端/api向您发送的内容吗?此外,您在何处以及如何显示/获取许可证?在模板中,在控制器中?怎么做?这一切都很重要。。。。