emberjs中的嵌套路由,不使用资源插座

时间:2013-03-14 02:09:44

标签: javascript templates ember.js nested-routes

我有一个路由器,每个路由(和路由对象)都有相应的模板。我希望能够独立于其父模板显示每个模板,这意味着我不希望嵌套路由呈现给父模板的插座。基本上为每个嵌套路由创建一个单独的“页面”。

App.Router.map(function() {
  this.resource('recipes', function() {
    this.route('new');
    this.route('show', { path: '/:recipe_id' });
  });
});

我正在使用ember1.0.0-rc1

由于

3 个答案:

答案 0 :(得分:4)

  

我希望能够独立于其父模板显示每个模板,这意味着我不希望将嵌套路由呈现给父模板的插座。

也许说明显而已,但如果您没有为资源创建模板,那将会发生什么。在您的情况下,如果您没有创建recipes.hbs模板,那么ember会将new.hbsshow.hbs模板呈现到{{outlet}}中的application.hbs

注意:如果这样做,Ember将输出一个控制台警告“直接父路线没有渲染到主插座......”

ember routing guide

对此进行了详细说明

答案 1 :(得分:1)

来自灰烬指南的快速说明

  

如果使用this.resource定义资源但不提供函数,则不会创建隐式resource.index路由。在这种情况下,/ resource将仅使用ResourceRoute,ResourceController和资源模板。

你的路由很好,@ mikegrassotti是正确的,虽然但是如果你想要一个“食谱”索引没有让你的“新”和“show”路径模板嵌​​套在“食谱”里面(没有主/细节)你需要创建一个里面没有插座的食谱/索引模板。

<script type="text/x-handlebars" data-template-name="recipes/index">
<ul>
  {{#each}}
    <li>{{recipe}}</li>  
  {{/each}}
</ul>

您无需更改路线设置。正如Mike上面提到的,ember会将new.hbs和show.hbs模板呈现到application.hbs中的{{outlet}}

答案 2 :(得分:0)

Ember.js不支持嵌套路由,它只支持嵌套资源。最终嵌套的路由可以包含路由。

将资源视为事物,将路线视为行动。