Ember.js pre4, how to do the previous pre2 connectOutlet stuff

大城市里の小女人 提交于 2019-12-06 02:48:04

问题


In pre2, suppose I had this application code, outside the router:

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

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

That is, I fill an outlet named 'modal' added to the 'application' template, with my data.

Now, in pre4 I have no reference to the controllers created by the router. How would you fill an outlet from outside the router?

I could ask the router for a transition, but I don't want to modify the URL, as I'm just opening a modal over the current content.

EDIT:

This is what I came up with for a temp fix, by looking up the application view from the App.Router.router object.. obviously it's a dirty hack, anyone know the best & right way to do it in 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:


If you just need to add your view into the app you can use my solution in this question:

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

But if you need to add it too an outlet, you can do it by sending an event to the router and just render it in the event without transitioning it to another route.

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

See fiddle for an example:

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



来源:https://stackoverflow.com/questions/14456215/ember-js-pre4-how-to-do-the-previous-pre2-connectoutlet-stuff

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!