我正在将我的应用程序从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')获取此信息
如何从以编程方式创建的视图中获取控制器?
在类似的说明中,为我尚未访问的视图提供控制器的最佳方法是什么?这个项目在视图层中有一些令人尴尬的逻辑,我想将其推入相关的控制器。
答案 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
可以是您想要的任何内容 - 即使是尚未分配给任何视图的内容。