Ember使用查询初始化路径模型

时间:2013-02-17 18:33:02

标签: ember.js

我正在尝试使用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是异步填充的,因此未正确设置模型数据。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分: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;
    }
});

答案 1 :(得分: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);
  }
});