如何在Ember中命名父级时定义要呈现的嵌套路由

时间:2014-05-15 17:05:34

标签: ember.js

我有博客路线和博客路线。

路由器:

App.Router.map(function () {
    this.resource('blog', function () {
        this.route('post', {path: ':id/:title'});
    });
});

路线:

App.BlogRoute = Ember.Route.extend({
    model: function () {
        return this.store.find('BlogPost');
    }
});

App.BlogPostRoute = Ember.Route.extend({
    model: function (params) {
        return this.store.findById('BlogPost', params.id);
    },
    serialize: function (model, params) {
        return {
            id: model.get('id'),
            title: Ember.String.dasherize(model.get('title'))
        }
    }
});

在我父亲blog路线的Handlebars模板中,当我点击{{outlet}}之一时,我的{{#link-to}}工作正常。

我想要做的是默认情况下呈现当用户转到/blog路线时最新(最高ID)的博文。

我找到this question并尝试了这个结果,但无济于事:

App.BlogIndexRoute = Ember.Route.extend({
    redirect: function () {
        var latest = 3;
        this.transitionTo('blog.post', {id: latest});
    }
});

latest只是this.model.pop()的占位符或其所需的任何内容。)

我无法弄清楚如何使用模型中的数据加载子路径。

1 个答案:

答案 0 :(得分:2)

您可以使用modelFor

获取已经获取的任何资源/路由的模型(也称为父资源)
App.BlogIndexRoute = Ember.Route.extend({
    redirect: function () {
        var blogs = this.modelFor('blog');
        if(blogs.get('length')){
           this.transitionTo('blog.post', blogs.get('firstObject')); // or blogs.findBy('id', 123)
        }
    }
});