ember.js - 如何定义在 Ember 中点击父级时进行渲染的嵌套路由

标签 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 时,它可以正常工作-到}}s。

我想要做的是,当用户转到 /blog 路由时,默认渲染最新(最高 ID)的博客文章。

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

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

(latest 只是 this.model.pop() 或任何需要的占位符。)

我只是不知道如何准确地使用模型中的数据加载子路由。

最佳答案

您可以使用 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)
        }
    }
});

关于ember.js - 如何定义在 Ember 中点击父级时进行渲染的嵌套路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684593/

相关文章:

Ember.js:基于模型属性值的动态宽度

javascript - Ember 绑定(bind) Controller 计算属性未更新

ruby-on-rails - EmberJS 的 Assets 编译速度很慢

javascript - 如何将子资源的新路由渲染到应用程序侧边栏导出中?

ember.js - Ember-cli 服务器 - 代理不起作用

javascript - 如何通过实时重新加载将西兰花插件添加到 ember-cli 应用程序?

ember.js - 获取 Ember View 的自定义 Controller

javascript - 循环遍历 App.Car.find() 的结果

javascript - Ember.js 表单即时提交

jquery - 在转换到路由之前跳转到页面顶部