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



(ember 2.14)我有一个产品编辑路由的子视图,我想在其中显示与另一个模型(许可证)的关系。当然product hasMany licenceslicence belongsTo produit。我也有一个可以添加关系的组件。据我了解,我应该在路由的模型函数中加载来自组件外部的所有数据。

当我从emberapp中的其他地方进入路线时,它显示了正确的关系,但是当我直接进入页面时,只显示第一个许可证作为关系。

这是produits.edit.document Route的模型:

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);
  }

licence.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}}

在两种情况下,都可以从应用程序或重新加载应用程序访问,Ember检索产品和许可索引。在一种情况下,他将仅显示产品的第一个许可证,而在其他所有正确的许可证中都与产品有关。

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

编辑:现在,如果

可以工作
  • 许可证包括服务器的JSON响应中的许可证

  • JSON对API的调用是代码200,而不是304。在两种情况下,浏览器工具都是相同的。它只能与Firefox一起使用。有时,第一个测试失败(200),但它在第二个测试(304)起作用,并且未能进行后续重新加载(304)

一个人认为您可以同步加载关系。为此,您可以像此licences: DS.hasMany('licence', { async: false })一样改变自己的关系。现在,当您进行查询时,您必须包括关联,例如此this.store.findRecord('produit', params.produit_id, { include: 'licences' })。您可以加载更多这样的关联,{ include: 'licences.licence_versions,famille' }。检查此信息。

您可能还会在您的协会中使用{inverse: 'licences'}

最新更新