3

我正在尝试使用 DS 查询初始化 Route 的模型,如下所示

App.Router.map(function() {
    this.resource('post', { path: '/posts/:post_slug' });
});

App.PostsRoute = Ember.Route.extend({
    model: function(params) {
        var records = App.Post.find({ slug: params.post_slug });
        return records.get('firstObject');
    }
});

在这里,我通过它的 slug 找到一个 Post 并将第一个结果设置为路由模型。但由于records是异步填充的,模型数据设置不正确。这样做的正确方法是什么?

4

2 回答 2

7

使用延迟模式解决了这个问题。

App.PostsRoute = Ember.Route.extend({
    model: function(params) {
        var records = App.Post.find({ slug: params.post_slug });
        var promise = Ember.Deferred.create();
        records.addObserver('isLoaded', function() {
            promise.resolve(records.get('firstObject'));
        });
        return promise;
    }
});
于 2013-02-17T21:53:45.073 回答
0

那应该做到这一点:

App.Router.map(function() {
  this.resource('posts');
  this.resource('post', { path: '/posts/:post_id' });
});

App.PostsRoute = Ember.Route.extend({
  model: function() {
    return App.Post.find();
  }
});

App.PostRoute = Ember.Route.extend({
  model: function(params) {
    return App.Post.find(params.post_id);
  }
});
于 2013-02-17T18:41:33.903 回答