这是我遇到的一个常见问题,所以我想这是我做错了。
我有模特:
App.Post = DS.Model.extend({
author: DS.hasMany('author')
});
App.Author = DS.Model.extend({
name: DS.attr('string'),
post: DS.belongsTo('post)
});
用于获取帖子的单个REST调用包括作者,因此我知道在store.find('post')
之后我在商店中拥有所有帖子和作者。但是,当我使用这个数据渲染页面时(使用ArrayController
,我注意到相关作者需要一些时间渲染,尽管只有一个请求。进一步的检查显示在路径中setupController
{1}},数据已全部加载到商店中,但尚未设置关系。如果我这样做:
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.store.find('post');
},
setupController: function(controller, model) {
model.forEach(function(post) {
console.log(post.get('author'));
});
controller.set('model', model);
}
});
控制台日志显示" undefined"的列表作为每个作者。
只向服务器发出一个请求,我检查了响应是否有效。此外,最终会呈现数据,但是我会在模板中显示undefined
几秒钟{{author.name}}
。看起来数据已加载,但直到很久之后才会建立连接。我无法在文档中找到解释这一点的任何内容,而且我无法找到一种方法来强制它在呈现之前正确加载。我已经在使用loading
模板了,我尝试强制加载model
:
model: function() {
return Ember.RSVP.hash({
posts: this.store.find('post'),
authors: this.store.find('author')
});
}
但没有任何区别。
答案 0 :(得分:0)
你试过这个,因为模型是承诺?
App.IndexRoute = Ember.Route.extend({
model: function() {
return this.store.find('post');
},
setupController: function(controller, model) {
model.then(function(result){
result.forEach(function(post) {
console.log(post.get('author.name'));
});
});
controller.set('model', model);
}
});
我不确定这是否是复制粘贴错误,但值得检查
App.Author = DS.Model.extend({
name: DS.attr('string'),
post: DS.belongsTo('post) // missing the closing quote
});