我的索引模板有兩個出口,一個用於標題,另一個用於內容。呈現在內容中的模板根據正在觀看的內容而改變。如何在路由器v2中呈現路由的多個模板
在舊路由器中,可以通過在擁有該模板的不同控制器上調用connectOutlet
來完成此操作。我無法弄清楚如何在新路由器中做同樣的事情。
有什麼建議嗎?
我的索引模板有兩個出口,一個用於標題,另一個用於內容。呈現在內容中的模板根據正在觀看的內容而改變。如何在路由器v2中呈現路由的多個模板
在舊路由器中,可以通過在擁有該模板的不同控制器上調用connectOutlet
來完成此操作。我無法弄清楚如何在新路由器中做同樣的事情。
有什麼建議嗎?
隨着我的研究,我來到了這一點: 說你有一個像這樣定義的路由器:
App.Router.map(function(match) {
match('/').to('index');
});
ApplicationTemplate:
<script type="text/x-handlebars">
{{outlet header}}
{{outlet}}
</script>
IndexTemplate:
<script type="text/x-handlebars" data-template-name="index">
{{outlet dashboard}}
{{outlet spaces}}
</script>
現在,我們要的是,當用戶進入該指數路由器,該頁面應該:
要做到這一點,我們寫indexRoute
App.IndexRoute = Em.Route.extend({
renderTemplate: function(controller, model){
//Render header into header outlet
this.render('header',{
outlet:'header'
});
//Render index into main outlet. If you comment out
//this line, the code below fails
this.render('index');
//by using into, we can render into the index template
//Note: The controller is optional.if not specified,
//ember picks up controller for the given template.
this.render('dashboard',{
outlet:'dashboard',
into:'index',
controller:this.controllerFor('somethingElse', App.TestModel.find())
});
//controller is SpacesController
this.render('spaces',{
outlet:'spaces',
into:'index'
});
}
});
可以使用renderTemplates功能的路由器來呈現多視圖的命名網點:
renderTemplates:function() {
this.render('todos_list', {
into:'todos', //template name
outlet: 'todos', //named outlet
controller: 'listController' //controller you want to use
});
this.render('todos_test', {
into:'todos',
outlet: 'test',
controller: 'testController'
});
},
setupControllers:function (controller, model) {
this.controllerFor('list').set('content', listmodel.find());
this.controllerFor('test').set('content', testmodel.find());
}
的setupControllerControllerFor功能將允許你指定我們設置爲原路由器「語境」。
在模板中,你會像以前一樣的名字網點:
{{outlet list}}
{{outlet test}}
希望這有助於:)
下面的代碼似乎setupControllers和renderTemplates已經燼,最新被棄用。 – adivis
嗯......你確定嗎?燼寶網站上的新指南提醒他們:http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/ –
5小時前剛合併。 [這一個](https://github.com/emberjs/ember.js/commit/6d771b7a9389fff826b8f2e500721da6a7ce2fc0)和[this](https://github.com/emberjs/ember.js/commit/2468b42f801dc192a6e762293f3590d25274dfd0)。但是會用新功能嘗試你的代碼。 – adivis
和我原來的答案相當相似吧? –
我的第一個想法是要求你更新你的函數以符合最新的ember,以便我可以接受你的答案。 但是,我真正想要的是this.render('index')並隨後呈現給它。您的代碼僅呈現到應用程序模板中。這與正確的方式來分配控制器的內容使我寫了一個新的答案 – adivis
爲什麼兩個模板的名稱都是'index',即'data-template-name'屬性值'index'? – Ygg