5

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

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

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

也就是说,我用我的数据填充添加到“应用程序”模板中的名为“模态”的插座。

现在,在 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);
4

1 回答 1

2

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

使用 Ember 路由器 v2 进入和退出模态状态的正确方法是什么?

但是,如果您还需要将其添加为一个出口,您可以通过向路由器发送一个事件并在事件中渲染它而不将其转换到另一个路由来实现。

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

请参阅小提琴的示例:

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

于 2013-01-22T14:40:07.670 回答