我有很多模板可以渲染到应用程序模板中。但是,应用程序模板只有{{outlet}}
而没有其他内容。
home
模板必须直接呈现到应用程序模板中。但是,所有其他模板必须与navbar
和sidebar
一起呈现。
目前,我使用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
,但仍在渲染导航栏模板。
答案 0 :(得分:2)
您可以创建一个模板,其中可以呈现navbar
和sidebar
,除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}}