删除呈现的应用程序模板

时间:2014-06-30 08:03:00

标签: ember.js routing

我有很多模板可以渲染到应用程序模板中。但是,应用程序模板只有{{outlet}}而没有其他内容。

home模板必须直接呈现到应用程序模板中。但是,所有其他模板必须与navbarsidebar一起呈现。

目前,我使用partial在所有其他模板中呈现公共数据(“主页”除外)

我该如何解决这个问题?我只需要在家中直接渲染,而所有其他模板必须与导航栏和侧边栏一起渲染。

我可能会遗漏一些非常明显的东西。我应该怎样做才能在一个模板中呈现回家,其余的在另一个模板中?

更新1

申请模板

  {{#unless renderNav}}
    {{outlet home}}
  {{else}}
    {{partial 'navbar'}}
    <div class="container">
      <div class="row row-offcanvas row-offcanvas-right">
        <div class="col-xs-12 col-sm-9">
          {{outlet}}
        </div>
        <div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar" role="navigation">
          <div class="list-group">
            <a href="#" class="list-group-item active">Link</a>
            <a href="#" class="list-group-item">Link</a>
          </div>
        </div><!--/span-->
      </div><!--/row-->
    </div><!--/.container-->
  {{/unless}}

更新2

上述代码会导致渲染问题。导航到主页模板不会导致任何问题。但在所有其他模板中,渲染的第一页保持在顶部,而下一页则在其下方呈现。

例如,如果在'home'之后,我转换为'first','first'呈现两个元素A and B。 如果我接下来转换为呈现C的'second',我得到的是A and B and C,而不是C

更新3

通过观察应用程序控制器中的currentPath属性解决了之前UPDATE中的错误。但现在在“主页”路线中,不会显示“主页”模板。而是使用空插座渲染导航栏。

我重命名了我的商店并强制HomeRoute呈现为outlet 'home'。但仍然没有变化。所有其他模板都是无缝渲染的,但“home”根本不会渲染。

我确认HomeRoute中的布尔值为false,但仍在渲染导航栏模板。

1 个答案:

答案 0 :(得分:2)

您可以创建一个模板,其中可以呈现navbarsidebar,除home之外的所有模板都是此新模板的嵌套路由。 这当然可以给你带来url麻烦,所以另一种方法是在application控制器中使用一个基于currentPath的布尔计算属性来呈现你的部分

e.g。

App.ApplicationController = Ember.Controller.extend({
    showPartials: (function() {
      this.get('currentPath') != 'home' 
    }).property('currentPath')
});

然后在您的应用程序模板中执行类似

的操作
{{#if showPartials}}
  {{partial "navbar"}}
  {{partial "sidebar"}}
{{/if}}