Qual é o caminho certo para entrar e sair dos estados modais com o Ember router v2?

Não consigo descobrir a maneira correta de lidar com estados / visualizações de modos com o novo roteador Ember. Mais geralmente, como você lida com estados que você pode inserir e sair sem afetar o estado "principal" (a URL)?

Por exemplo, um botão "Nova mensagem" que ésempre disponível, independentemente do estado atual da folha. Clicar em "Nova mensagem" deve abrir a nova mensagem modal sobre a visualização atual, sem afetar o URL.

Atualmente, estou usando uma abordagem como esta:

Rotas:

App.Router.map(function() {
   this.route('inbox');
   this.route('archive');
});

App.IndexRoute = Em.Route.extend({
  ...
  events: {
    newMessage: function() {
      this.render('new_message', { into: 'application', outlet: 'modalView' });
    },

    // Clicking 'Save' or 'Cancel' in the new message modal triggers this event to remove the view:
    hideModal: function() {
      // BAD - using private API
      this.router._lookupActiveView('application').disconnectOutlet('modalView');
    }
  }
});

App.InboxRoute = Em.Route.extend({
   ...
   renderTemplate: function(controller, model) {
     // BAD - need to specify the application template, instead of using default implementation
     this.render('inbox', { into: 'application' });
   }
});

App.ArchiveRoute = ... // basically the same as InboxRoute

application.handlebars:

<button {{action newMessage}}>New Message</button>
{{outlet}}
{{outlet modalView}}

Eu obviamente deixei de fora algum código por brevidade.

Esta abordagem "funciona", mas tem os dois problemas identificados acima:

Estou usando uma API privada para remover a exibição restrita nohideModal manipulador de eventos.Preciso especificar oapplication modelo em todas as minhas sub-rotinas, porque se eu não, a implementação padrão derenderTemplate tentará renderizar no modelo do modal em vez de no aplicativo se você abrir o modal, fechá-lo e, em seguida, navegar entre os estados de caixa de entrada e arquivamento (porque o modelo do modal se tornou olastRenderedTemplate para o IndexRoute).

Obviamente, nenhum desses problemas são dealbreakers, mas seria bom saber se há uma abordagem melhor que estou faltando ou se isso é apenas uma lacuna na API do roteador atual.

questionAnswers(2)

yourAnswerToTheQuestion