2017-05-23 5 views
1

コンポーネントがありますが、それは実際にはモーダルダイアログです。 そのダイアログを終了して「OK」ボタンを押すと、そのダイアログを開いた滞在ページにとどまります。 これは難しくありません。コンポーネントからEmberルートをリフレッシュ/再ロードする

しかし、問題は、データ変更を反映するためにダイアログがデータを変更している(私はREST呼び出しによってデータを取得しています)ので、私がすでに行っているルートを更新する必要があるということです。

コンポーネントから呼び出すので、Routeを持っていないので、route.refresh()を呼び出すことはできません。

私はルータを取得しようとしました:

this.set('router', Ember.getOwner(this).lookup('router:main'));

と同じページへの移行をした:

_this.get('router').transitionTo('my-route')

しかし、ルートは(私だけ開いて変更されていないので、ダイアログ)、transitionToがトリガーされません!

トリガーを強制的に実行できる方法はありますかtransitionToまたは私が行っているページを更新しますか?

ありがとうございました!

答えて

2

、最寄りのルートまたはアプリケーション・ルート・ファイルにrefreshCurrentRouteメソッドを定義します。

actions:{ 
refreshCurrentRoute(){ 
    this.refresh(); 
} 
} 

あなたのコンポーネントから、refreshCurrentRouteアクションに電話する必要があります。 ember-route-action-helperを使用するか、クロージャーアクションを渡します。

+0

ありがとう@kumkanillam! – nullpointer

2

最初に、routing serviceをコンポーネントに注入すると、現在のルート名を簡単に取得できます。
その後、あなたは現在のルートのインスタンスを取得し、そのrefresh方法を適用することができます。このため

// app/components/a-component.js 
 

 
import Component from "ember-component"; 
 
import service from "ember-service/inject"; 
 
import getOwner from "ember-owner/get"; 
 

 
export default Component.extend({ 
 
\t routing: service("-routing"), 
 
\t actions: { 
 
\t \t refresh() { 
 
\t \t \t const currentRouteName = this.get("routing.currentRouteName"); 
 
\t \t \t const currentRouteInstance = getOwner(this).lookup(`route:${currentRouteName}`); 
 
\t \t \t currentRouteInstance.refresh(); 
 
\t \t } 
 
\t } 
 
});

+0

'getOwner'ルックアップで' Route'ではなく 'Router'が得られますか? 'refresh'メソッドは' Router'ではなく 'Route'に属します。 – nullpointer

+0

ルータは 'routing.router'で与えられます。ルックアップはルックアップモジュール名の 'route:'接頭辞のためにルートインスタンスを探しています。 'refresh'メソッドは本当に' Route'メソッドです。 'currentRouteInstance.refresh();'は 'Route'インスタンスのrefreshメソッドを適用しています。私の解決策は@ kumkanillamとは違うので、あなたが何か行動を起こす必要はありません。 –

+0

'currentRouteInstance'は未定義で、' refresh'を呼び出す際に例外をスローします。 'currentRouteName'はうまく計算されました。 – nullpointer

関連する問題