Ember没有链接相关模型

时间:2014-09-12 09:55:18

标签: javascript ember.js ember-data promise

这是我遇到的一个常见问题,所以我想这是我做错了。

我有模特:

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')
    });
}

但没有任何区别。

1 个答案:

答案 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
});