Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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);
like image 228
Flavio Copes Avatar asked Nov 04 '22 06:11

Flavio Copes


1 Answers

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

like image 96
TommyKey Avatar answered Jan 04 '23 13:01

TommyKey