根据我的理解,假设您想要 3 个部分(可以是任意数字)页眉、内容和页脚,您可以执行以下操作
<script type="text/x-handlebars" data-template-name="application">
{{view MyApp.HeaderView}}
{{#view MyApp.ContentView}}
{{outlet}}
{{/view}}
{{view MyApp.FooterView}}
</script>
<script type="text/x-handlebars" data-template-name="app-header">
All your Header related HTML
</script>
<script type="text/x-handlebars" data-template-name="app-content">
HTML related to content
{{yield}} //this will be explained at the end
More HTML if you want
</script>
<script type="text/x-handlebars" data-template-name="app-footer">
HTML related to footer
</script>
MyApp.HeaderView = Ember.View.extend({
templateName: 'app-header'
})
MyApp.ContentView = Ember.View.extend({
templateName: 'app-content'
})
MyApp.FooterView = Ember.View.extend({
templateName: 'app-footer'
})
MyApp.ApplicationView = Ember.View.extend({
templateName: 'application'
})
简而言之{{yield}}
,给定视图的块助手中的任何内容都在那里,在上面的示例中MyApp.ContentView
,把手中的{{outlet}}
定义{{#view MyApp.ContentView}}
被插入在{{yield}}
类似的行上,让我展示layoutName属性和templateName之间的区别财产,
App.someView = Ember.View.extend({
tagName: 'a',
templateName: 'a-template',
layoutName: 'a-container'
})
<script type="text/x-handlebars" data-template-name="a-template">
Hi There
</script>
<script type="text/x-handlebars" data-template-name="a-container">
<span class="container">
{{yield}}
</span>
</script>
将导致以下 HTML
<a class="ember-view" id="ember235">
<span class="container ember-view" id="ember234">
Hi There
</span>
</a>
使用这些概念在您的情况下拆分应用程序把手,就像
{{view App.NavigationView}}
{{outlet}}
根据最新的余烬更新
新的ember支持partials
类似于rails,现在我们可以修改上面使用{{partial}}
如下:
{{partial "header"}}
{{outlet}}
{{partial "footer"}}
Ember 遇到此模板时会查找名称为_header的模板(类似于 rails)并插入模板(页脚也是如此)
如果想关联一个控制器,我们可以使用{{render}}
helper
{{render "sidebar"}}
在handlebars中的指定位置插入名称为sidebarApp.SidebarController
的模板,此外它也与之关联,
注意:我们不能{{render 'sidebar'}}
在同一个handlebars文件中多次使用。
但是,如果您想使用小部件,例如查看给定页面中的多个位置,请使用{{view}}
帮助程序