EmberJS-嵌套资源的渲染模板

时间:2014-03-18 06:31:58

标签: ember.js handlebars.js

我的Ember路由器看起来与下面类似。

App.Router.map(function() {
    this.resource('projects', function () {
        this.resource('listings', { path: '/:project_id/listings' }, function() {
            this.route('listing', { path: '/:listing_id' });
        });
    });         
});

我有2个模板(项目,列表)。项目模板有一个{{#link-to}}助手,可以为列表资源添加一个锚点。项目模板工作正常。 {{#link-to}}帮助器似乎也正确生成url(〜/ projects / 2 / listing)。

现在列表正确呈现,但它们在项目模板中呈现。我假设这是因为资源是嵌套的。所以我删除了嵌套,并将项目和列表作为自己的资源。

App.Router.map(function() {
    this.resource('projects');          
    this.resource('listings', { path: 'projects/:project_id/listings' }, function() {
            this.route('listing', { path: '/:listing_id' });
    });
});

问题是当路线转换到列表时,不会呈现列表模板。它只是空白。下面的小提琴演示了这个问题。

小提琴:http://jsfiddle.net/harshavarma/aqHnt/3/

1 个答案:

答案 0 :(得分:5)

要做你想做的事,请按照与

相同的方式构建路线
App.Router.map(function() {
    this.resource('projects', function () {
        this.resource('listings', { path: '/:project_id/listings' }, function() {
            this.route('listing', { path: '/:listing_id' });
        });
    });         
});

然后,projects模板应该只是{{outlet}}。如果有内容仅在导航到/ projects时要呈现,而不是在深入导航时,请将该内容放在projects/index模板中(或根据您的命名约定调用该模板)和设置ProjectsIndexRouteProjectsIndexController上任何必要的路由器和控制器内容。现在,您的listings模板只会嵌套在projects内,这只是一个插座,在查看商家信息时,您将看不到任何projects/index内容。

http://emberjs.com/guides/routing/defining-your-routes/#toc_resources