2

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

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

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

4

2 回答 2

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

于 2013-03-06T10:17:11.967 回答
0

当你渲染这样的东西时:

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

this.controllerFor可以是您想要的任何东西 - 甚至是尚未分配给任何视图的任何东西。

于 2013-03-20T16:26:07.693 回答