Ember.js pre4,如何做以前的pre2 connectOutlet的东西

时间:2013-01-22 10:19:12

标签: ember.js ember-router

在pre2中,假设我在路由器外面有这个应用程序代码:

  var controller = App.MyController.create();
  controller.content = [...];

  App.get('router').get('applicationController').connectOutlet({
    outletName: 'modal',
    controller: controller,
    viewClass: App.MyView,
    context: controller
  });

也就是说,我用我的数据填充了一个名为'modal'的插座,添加到'应用'模板中。

现在,在pre4中,我没有引用路由器创建的控制器。你如何从路由器外部填充插座?

我可以要求路由器进行转换,但我不想修改URL,因为我只是打开当前内容的模式。

编辑:

通过从App.Router.router对象中查找应用程序视图,这就是我想出的一个临时解决方案..显然这是一个肮脏的黑客,任何人都知道最好的&在pre4中正确的方法吗?

  var controller = App.MyController.create();
  controller.content = this.get('content');

  var theView = App.MyView.create();
  theView.set('controller', controller);

  App.Router.router.currentHandlerInfos[0].handler.router._activeViews.application[0].connectOutlet('modal', theView);

1 个答案:

答案 0 :(得分:2)

如果您只是需要将视图添加到应用中,则可以在此问题中使用我的解决方案:

What's the right way to enter and exit modal states with Ember router v2?

但是如果你需要添加它也是一个插座,你可以通过向路由器发送一个事件并在事件中呈现它而不将其转换到另一个路由来实现。

events: {
    showModal: function(){
        this.render('modal', {into: 'index', outlet: 'modalOutlet', controller = this.controllerFor('modal')}); 
    }
}

请参阅小提琴示例:

http://jsfiddle.net/Energiz0r/gChWa/1