ember.js:如何使用GenerateControl初始化控制器
我需要在多个其他路由中插入路由ember.js:如何使用GenerateControl初始化控制器,ember.js,ember-data,Ember.js,Ember Data,我需要在多个其他路由中插入路由类别中的视图和控制器,而不将它们嵌套在该类别路由中(因为我希望保持URL独立) 因此,我正在使用从现有的类别路径获得的控制器,将类别模板渲染到主应用程序中的outlettopbar App.PostRoute=Ember.Route.extend({ renderTemplate:function(){ 这个。render(); 此.render('categories'{ 出口:'topbar', 改为:'应用', controller:this.controll
类别
中的视图和控制器,而不将它们嵌套在该类别
路由中(因为我希望保持URL独立)
因此,我正在使用从现有的类别
路径获得的控制器,将类别
模板渲染到主应用程序
中的outlettopbar
App.PostRoute=Ember.Route.extend({
renderTemplate:function(){
这个。render();
此.render('categories'{
出口:'topbar',
改为:'应用',
controller:this.controllerFor('categories')
});
}
});
当我访问类别
路线时,一切正常!我甚至可以从那里浏览其他路线。但如果我首先访问任何其他路径,则似乎不会创建类别控制器:
断言失败:找不到路由“类别”的控制器。确保此路由存在并且已至少输入一次。如果必须在不输入路由的情况下初始化控制器,请使用“GenerateControl”
很好的警告:)我希望所有的框架都那么聪明!所以我试图手动生成那个控制器。。。但是怎么做呢
我试过:
App.CategoriesRoute.create().generateController('categories',App.categories)
静态版本:
App.CategoriesRoute.generateController('categories',App.categories)
这似乎不是正确的做法。有什么帮助吗?正如@mavilein在他的评论中已经提到的,这种行为最近在rc7发行版中被引入,遗憾的是,this.controllerFor(“…”)
不再自动为您生成相应的控制器,因此我想通过显式地生成CategoriesController
(例如在routesinit
方法中),它应该可以工作:
App.CategoriesRoute = Ember.Route.extend({
init: function() {
this._super();
this.generateController('categories');
});
运行示例并检查控制台:您将看到如下内容:
generated -> controller:categories Object {fullName: "controller:categories"}
希望有帮助。这是与我们的朋友直觉像素相关的东西。
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'
});
}
});
您可以在model hook本身中完成这项工作。要完成来自@seenivasan和@inuitivepixel的答案,以下是我所做的,它工作得非常完美:
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
});
}
});
我认为最好在init
函数中调用generateController
,以确保它只执行一次。这种行为是在RC7中引入的,所以它确实是新的,我自己还没有尝试过。你已经试过这个了吗。GenerateControl('categories')?你最终生成了你的控制器吗?是的,很抱歉迟到了!感谢大家:)现在可以正常工作了,刚刚完成了@seenivasan的答案。请检查我的答案以获得工作代码。谢谢你的建议@seenivasan@感谢你的分享。这似乎很合乎逻辑。