我正在阅读Ember教程并且它运行良好,但我无法弄清楚它的一个方面。
Todos.Router.map(function () {
this.resource('todos', { path: '/' }, function () { // Index route
// additional child routes
this.route('active'); // Implicit this.route("active", { path: "/active" });
this.route('completed'); // Implicit this.route("completed", { path: "/completed" });
});
});
...
Todos.TodosCompletedRoute = Ember.Route.extend({
model: function() {
return this.store.filter('todo', function(todo) {
return todo.get('isCompleted');
});
},
renderTemplate: function(controller) {
this.render('todos/index', {controller: controller});
}
});
对我来说,我们正在重用现有模板并简单地更改已分配的模型,在这种情况下,将其限制为已完成的待办事项列表。
我不明白的是要渲染的{controller: controller}
参数。
根据Chrome中的Ember检查员,无论是否有{controller: controller}
参数,控制器都是TodosCompletedController
。
如果存在{controller: controller}
参数,则转到应用程序路径(在我的情况下为file:///Users/dpwrussell/Checkout/web/ember/TodoMVC/index.html#/
,然后单击“已完成”会导致正确的响应,仅显示已完成的待办事项。
如果没有{controller: controller}
参数,单击“已完成”链接将显示完整的待办事项列表,而不仅仅是已完成的待办事项。
最后,如果直接转到网址file:///Users/dpwrussell/Checkout/web/ember/TodoMVC/index.html#/completed
,则会显示只有已完成的待办事项的正确列表,而不管{controller: controller}
是否缺失,但如果您转到全部,则再次使用已完成链接,它将再次停止工作。
jsbin showing how it works if you go directly to completed url
由于
答案 0 :(得分:0)
您可以查看路线的render和renderTemplate方法,以便更好地理解。如果未在this.render('todos/index', {controller: controller})
中指定控制器,则Ember将创建并使用TodosCompletedController,因为路由是TodosCompletedRoute。参数' controller'不是TodosController,它是生成的TodosCompletedController。即使在调用render
时未通过控制器,一切都应该正常工作。这是JSBIN。