我以前有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
有余烬数据3.5
答案 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)
}
});