我需要插入视图&来自多个其他路由中的路由categories
的控制器,而不将它们嵌套在categories
路由中(因为我希望保持URL独立)。
所以,我使用我从现有categories
路径获得的控制器,将application
模板渲染到插座topbar
中的主categories
模板中。
App.PostRoute = Ember.Route.extend({
renderTemplate: function() {
this.render();
this.render('categories', {
outlet: 'topbar',
into: 'application',
controller: this.controllerFor('categories')
});
}
});
当我访问categories
路线时,一切正常!我甚至可以从那里浏览其他路线。但是,如果我首先访问任何其他路由,则似乎不会创建categories
控制器:
断言失败:无法找到路径“类别”的控制器。确保此路线存在且至少已输入一次。如果必须在不输入路径的情况下初始化控制器,请使用`generateController`。
好警告:)我希望所有框架都那么聪明!所以我试图手动生成该控制器......但是如何?
我试过了:
App.CategoriesRoute.create().generateController('categories', App.Category)
和静态版本:
App.CategoriesRoute.generateController('categories', App.Category)
这似乎不是正确的方法。有什么帮助吗?
答案 0 :(得分:3)
这与我们的朋友 IntuitivePixel。
一致App.PostRoute = Ember.Route.extend({
renderTemplate: function() {
this.render();
//assigning the model...
var context = ['a','b','c','d'];
var instance = Em.generateController(this.get('container'),'categories',context);
instance.set('content',context);
this.render('categories', {
outlet: 'topbar',
into: 'application'
});
}
});
你可以在模型钩子里做这些东西。
答案 1 :(得分:2)
正如@mavilein在他的评论中已经提到的那样,最近在 rc7 版本中引入了这种行为,并且可悲地this.controllerFor('...');
不再自动为您生成相应的控制器,所以我想通过显式生成CategoriesController
(例如,在路由init
方法中)它应该起作用:
App.CategoriesRoute = Ember.Route.extend({
init: function() {
this._super();
this.generateController('categories');
});
运行示例并检查控制台:http://jsbin.com/odosoy/62/edit您将看到如下内容:
generated -> controller:categories Object {fullName: "controller:categories"}
希望它有所帮助。
答案 2 :(得分:1)
要完成 @seenivasan 和 @IntuitivePixel 的答案,这就是我所做的,而且效果很好:
App.PostRoute = Ember.Route.extend({
init: function() {
this._super();
this.generateController('categories');
},
renderTemplate: function() {
this.render();
//getting the generated controller
var categoriesController = this.controllerFor('categories');
//assigning the model
categoriesController.set('content', App.PostCategory.find());
this.render('categories', {
outlet: 'topbar',
into: 'application',
controller: categoriesController
});
}
});
我认为最好在generateController
函数中调用init
以确保它只执行一次。