我有一个hasMany关系的嵌套路由。我已经用这种方式宣布了模型:
export default DS.Model.extend({
label: DS.attr('string'),
archetyp: DS.attr('number'),
searchable: DS.attr('boolean'),
showInList: DS.attr('boolean'),
managedItem: DS.belongsTo('managedItem')
});
相应的模型如下:
export default DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string'),
logo: DS.attr('string'),
logo_alt: DS.attr('string'),
fields: DS.hasMany('field', {async: true})
});
在字段/索引路由中,我想从服务器加载字段。因此,我已经迷上了模型钩子。
export default Ember.Route.extend({
model() {
let fields = this.modelFor('managedItems/edit').get('fields');
if (fields.get('isFulfilled')) {
fields.reload();
}
return fields;
}
});
但是我看不到任何网络请求,如果我尝试console.log(字段),我看到模型是空的。我在这里想念什么?
编辑:作为附加信息:如果我只是调用this.modelFor(“managedItems / edit”)并询问模型对象的某些属性,除了isLoaded属性外,我总是得到未定义...
这是路由器:
Router.map(function() {
this.route('managedItems', {
}, function() {
this.route('new');
this.route('show', {path: ':managedItem_id'});
this.route('edit', {path: ':managedItem_id/edit' },
function() {
this.route('fields', { resetNamespace: true }, function () {
});
});
});
});
答案 0 :(得分:0)
路线中的模型钩子在任何情况下都应该返回Promise。你尝试过类似的东西吗?
export default Ember.Route.extend({
model() {
return this.modelFor('managedItems/edit').get('fields');
}
});
答案 1 :(得分:0)
将managedItems/edit
更改为managedItems.edit
,如下所示:
let fields = this.modelFor('managedItems.edit').get('fields');
“ managedItems / edit ”是路径的路径(如果不覆盖它)。路线的名称是“ managedItems.edit ”。
此外,fields.reload();
正在返回一个承诺。我不确定IMO正确的模型钩子函数是这样的:
export default Ember.Route.extend({
model() {
let fields = this.modelFor('managedItems.edit').get('fields');
if (fields.get('isFulfilled')) {
return fields.reload(); //You should return this promise.
}
return fields;
}
});