灰烬3.5属于未解决的关系

时间:2018-11-08 03:00:56

标签: javascript ember.js ember-data

我以前有emberjs 1.13,我将其升级到3.5 我在belongsTo关系中遇到问题,无法访问其中的数据。我的代码如下

模型

export default DS.Model.extend( {

  title: DS.attr( 'string' ),
  description: DS.attr( 'string' ),
  published: DS.attr( 'boolean' ),
  publishedAt: DS.attr( 'date' ),

  course: DS.belongsTo( 'course' ),
  author: DS.belongsTo( 'profile', { async: true } ),

  viewed: false,
  isNew: true,

}

在控制器中

this.get('model.published') working 
this.get('model.author.name') not working 

,但是相同的代码正在处理emberjs 1.13

有余烬数据1.13

enter image description here

有余烬数据3.5

enter image description here

1 个答案:

答案 0 :(得分:1)

这是从1.13直接升级到3.5的重大升级。

很多变化。为了完全了解更改的内容和原因,我强烈建议您每次升级次要或主要版本时都阅读Ember release notes。超级有帮助。

很可能author尚未加载到商店中。检查数据中是否加载了路由的model(),网络请求和Ember Inspector。

如果已加载,则可能是async: true。尝试删除它吗?

这是Ember 3.5中的可行示例:

app/models/thing.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({

  // Attributes
  title: attr('string'),
  description: attr('string'),
  published: attr('string'),
  publishedAt: attr('string'),

  // Relationships:
  // No need for async: true
  course: belongsTo('course'),
  author: belongsTo('author')

});

app/models/author.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';

export default Model.extend({
  name: attr('string')
});

app/route/thing.js

import Route from '@ember/routing/route';

export default Route.extend({
  model(params) {
    // Assuming you use JSON API
    // Make sure `author` is included when fetching `thing`
    return this.store.query('thing', {
      include: 'author, course'
    }),
  }
});

app/controllers/thing.js

import Controller from '@ember/controller';

export default Controller.extend({
  init(){
    console.log(this.model.author.name)
  }
});
相关问题