Ember 3.5 BelongsTo 关系未解决
Ember 3.5 BelongsTo Relationships not Resolving
我以前有 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
含 ember 数据 1.13
含 ember 数据 3.5
这是从 1.13 直接升级到 3.5 的重大升级。
很多都变了。为了完全理解发生了什么变化以及为什么发生变化,我强烈建议您在每次升级次要版本或主要版本时阅读每个 Ember release notes。超级有帮助。
很可能 author
没有加载到商店中。检查路由的 model()
、网络请求和 Ember 检查器是否加载了数据。
如果加载进去,可能是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)
}
});
我以前有 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
含 ember 数据 1.13
含 ember 数据 3.5
这是从 1.13 直接升级到 3.5 的重大升级。
很多都变了。为了完全理解发生了什么变化以及为什么发生变化,我强烈建议您在每次升级次要版本或主要版本时阅读每个 Ember release notes。超级有帮助。
很可能 author
没有加载到商店中。检查路由的 model()
、网络请求和 Ember 检查器是否加载了数据。
如果加载进去,可能是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)
}
});