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独立)

因此,我正在使用从现有的
类别
路径获得的控制器,将
类别
模板渲染到主
应用程序
中的outlet
topbar

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
(例如在routes
init
方法中),它应该可以工作:

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@感谢你的分享。这似乎很合乎逻辑。