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 に答える