【问题标题】:Nested route in emberjs without using the resource outletemberjs中的嵌套路由,不使用资源出口
【发布时间】:2013-03-02 06:02:02
【问题描述】:

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

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

我正在使用 ember1.0.0-rc1

谢谢

【问题讨论】:

    标签: javascript templates ember.js nested-routes


    【解决方案1】:

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

    也许是说显而易见的,但如果您不为资源创建模板,这正是会发生的事情。在您的情况下,如果您不创建 recipes.hbs 模板,则 ember 会将 new.hbsshow.hbs 模板渲染到 application.hbs 中的 {{outlet}} 中。

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

    这在ember routing guide中有更详细的解释

    【讨论】:

    • 感谢您的回复。在我提出问题后不久,我实际上意识到了你所说的。我所做的是,我保留了 recipes.hbs,但其中只有 {{ outlet }}。然后我按照我的方式定义了新的和显示的内容。我需要做的就是为路由对象创建一个新的索引模板,并使用 {{#linkTo 'recipes.index' }}Recipes{{/linkTo}} 而不仅仅是 {{#linkTo 'recipes'}}。 ..{{/linkTo}}
    【解决方案2】:

    来自 ember 指南的快速注释

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

    你的路由很好,@mikegrassotti 是正确的,虽然如果你想要一个“食谱”的索引没有嵌套你的“新”和“显示”路由模板在“食谱”(无主/详细信息)中,您需要创建一个内部没有插座的食谱/索引模板。

    <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}}

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多