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

时间:2013-03-06 01:03:27

标签: javascript ember.js migration

我正在将我的应用程序从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')获取此信息

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

在类似的说明中,为我尚未访问的视图提供控制器的最佳方法是什么?这个项目在视图层中有一些令人尴尬的逻辑,我想将其推入相关的控制器。

2 个答案:

答案 0 :(得分:1)

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

            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()中实例化的Controller。 视图可以通过编程方式实例化。 IB是此示例中应用程序的名称。

答案 1 :(得分:0)

当你渲染这样的东西时:

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

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