列表中的关联数据不会出现在模型的"代理"对象的内容中



我使用ember-cli@3.27.0,ember-data@3.27.1

有一个workshift.js型号

import DS from 'ember-data';
export default DS.Model.extend({
date: DS.attr(),
timestart: DS.attr(),
timeend: DS.attr(),
house: DS.belongsTo('house'),
responsible: DS.belongsTo('employee'),
employeeOnWorkshift: DS.hasMany('employee-on-workshift'),
});

有employee-on-workshift.js型号

import DS from 'ember-data';
export default DS.Model.extend({
workshift: DS.belongsTo('workshift'),
account: DS.belongsTo('account'),
employee: DS.belongsTo('employee'),
});

和employee.js模型

import DS from 'ember-data';
export default DS.Model.extend({
fio: DS.attr(),
age: DS.attr(),
phone: DS.attr(),
datebirth: DS.attr(),
telegram: DS.attr(),
user: DS.belongsTo('people'),
employeeOnWorkshift: DS.hasMany('employee-on-workshift'),
});

在此过程中,我将所有的workshift及其关联的employeeWorkshift数据卸载为一个数组。

import Route from './base-route';
import RSVP from 'rsvp';
export default Route.extend({
model(params) {
return this.store.findRecord('workshift', params.id);
},
afterModel(models) {
models.get('employeeOnWorkshift').forEach((employeeOnWorkshift) => {
employeeOnWorkshift.get('employee');
employeeOnWorkshift.get('employee.user');
})
}
});

是的,我知道为每个列表项加载额外的模型是一个糟糕的决定,但我的目标是找出为什么不显示数据。

在模板中,我只是浏览了模型列表,并试图获得employee.fio,但数据是空的

{{#each model.employeeOnWorkshift as |employeeOnWorkshift|}}
{{employeeOnWorkshift.employee.fio}}
{{/each}}

尽管在网络上的浏览器中,我可以看到employeeWorkshift列表中每个员工的数据是如何加载的:对后端的请求

我在控制台中查看了model e员工。Proxy对象返回到那里,据我所知,在其中,如果isPending=false和isSettled=true,则内容参数将填充Model对象,但即使在接收到数据后,也不会发生这种情况。

Proxy {isFulfilled: false, isRejected: false, content: null, _belongsToState: {…}, _super: ƒ, …}
[[Handler]]: Object
[[Target]]: Class
content: null
isFulfilled: false
isRejected: false
_belongsToState: {key: 'employee', store: Store, originatingInternalModel: InternalModel,   modelName: 'employee'}
_super: ƒ ()
Symbol(INIT_FACTORY): undefined
Symbol(OWNER): undefined
isPending: true
isSettled: false
isTruthy: false
meta: (...)
promise: (...)
isDestroyed: (...)
isDestroying: (...)
_debugContainerKey: (...)
[[Prototype]]: Class
[[IsRevoked]]: false

请告诉我我做错了什么,为什么员工没有这种形式的拐杖就不能卸载:

models.get('employeeOnWorkshift').forEach((model) => {
model.employee.then(function (employee) {
model.employee = employee;
});
});

您的afterModel钩子需要等待相关记录的获取,否则在最初渲染时它们将不存在。

async afterModel(model) {
const workshifts = await model.employeeOnWorkshift;
const employees = await Promise.all(workshifts.map((w) => w.employee));
await Promise.all(employees.map((e) => e.user));  
}

最新更新