Javascript Ember.jsv1.0.0-rc.1——如何为编程创建的视图获取/提供控制器?

Javascript Ember.jsv1.0.0-rc.1——如何为编程创建的视图获取/提供控制器?,javascript,ember.js,migration,Javascript,Ember.js,Migration,我正在将我的应用程序从Ember v1.0.0 pre3迁移到rc1,似乎我再也无法获取全局路由器实例,也无法在手动创建的视图中获取控制器 我有很多模式屏幕,目前不使用路由(TODO),但在我本周的最后期限内,我需要显示和填充这些模式 我正在创建我的情态动词,如: App.helpModalView = App.HelpModalView.create(); App.helpModalView.append(); 并在视图的didInsertElement方法中处理模式显示: didInse

我正在将我的应用程序从Ember v1.0.0 pre3迁移到rc1,似乎我再也无法获取全局路由器实例,也无法在手动创建的视图中获取控制器

我有很多模式屏幕,目前不使用路由(TODO),但在我本周的最后期限内,我需要显示和填充这些模式

我正在创建我的情态动词,如:

App.helpModalView = App.HelpModalView.create();
App.helpModalView.append(); 
并在视图的didInsertElement方法中处理模式显示:

didInsertElement: function() {
   // miscellaneous setup operations
   // ...
   this.$().modal({backdrop:"static"});
},
但是在实际视图类中

this.get('controller') == null
检查我的各种对象,看起来“controllerFor”只在路由器上可用,我曾经从App.router.get('controllerName')获取此信息

如何从以编程方式创建的视图中获取控制器


同样,为我尚未访问的视图提供控制器的最佳方式是什么?这个项目在视图层中有大量令人尴尬的逻辑,我想将其推到相关的控制器中。

我有一个类似的场景,并这样解决了它:

            IB.TreeNavController = Em.Controller.extend({
                container: IB.__container__,
                init: function() {
                  this._super();
                }              
            });

            IB.TreeNavView = Em.View.extend({
                templateName: 'treeNav',

                init: function() {
                    this._super();
                    var ctrl = IB.TreeNavController.create();
                    this.set('controller', ctrl);
                },
            });
所以我定义了一个控制器,它在视图的init()中实例化。 可以通过编程方式实例化视图。
IB是本例中应用程序的名称。

当您呈现如下内容时:

 this.render('treeNav', { controller: this.controllerFor('treeNav')};

此.controllerFor
可以是您想要的任何内容-即使是尚未分配给任何视图的控件。

酷。我也在想类似的事情,但我想知道实例化多个控制器是否有什么需要担心的?据我所知,该框架维护(或至少用于维护)每个控制器的一个实例,每个关联视图依次使用该实例。我向上投票,因为从技术上讲,这是可行的,但是我希望能找到一些方法来利用框架挂钩,这样我就不会得到同一个控制器的多个实例:)你知道吗?这在当时对我完全有效。答复(已接受):