web-dev-qa-db-ja.com

Ember.jsで現在のルートをリロードする方法は?

ember.jsには、モデル付きのルートがあります。ルートプレイリストにいるときに、別のJS関数からコールバックによって呼び出されたこのルートをリロードする(またはモデルに新しいデータを設定する)方法を教えてもらえますか?私は長い間ドキュメントを探してきましたが、助けにはなりません。

App.PlaylistRoute = Ember.Route.extend({
 setupController: function(controller, model) {
  $.getJSON('api/playlist.php?' + Math.random().toString(36), function (data) {
   controller.set('model', data);
  });
 }
});

どうもありがとう!

32
honzahommer

コントローラから transitionToRoute を使用します。

this.transitionToRoute('playlist', newModel);

ルートから transitionTo を使用します。

this.transitionTo('playlist', newModel);

たとえば、コントローラーでアクションがあると想像してください

App.PlaylistController = Ember.ArrayController.extend({
 actions: {
   grabNewModel: function(){
     //get some new model
     this.transitionToRoute('playlist', newModel);
   }
 }
});
8
Kingpin2k

答えの解決策は現在のルートでは機能しないようです。私は同じ問題を抱えており、ここで解決策を試してみましたが、うまくいきました。

http://discuss.emberjs.com/t/refresh-current-view-page-after-language-change/4291/5#post_5

あなたのルートで。

actions: {
  sessionChanged: function() {
    this.refresh();
  }
}

そしてあなたのコントローラーで。

observeSession: function() {
  this.send("sessionChanged");
}.observes("session.isAuthenticated"),
73

それを行うには2つの方法があります。

1つは、プレイリストルートにアクションを記述し、その中にthis.refresh()を呼び出すことです。詳細については、Ember Guide refresh routeのメソッドをご覧ください。

もう1つの方法は、ルートの使用をリロードする必要がある状況に応じて、コントローラー内にあります

this.get('target.target.router').refresh();

2つのいずれもルートの更新に役立ちます。

emberガイドからの以下の更新方法の小さなメモ:

このルートとすべての子ルートでモデルを更新し、他のルートから移行するときのルートの入力方法と同様の方法で、beforeModel、model、afterModelフックを起動します。現在のルートパラメーター(article_idなど)はそれぞれのモデルフックに渡され、異なるモデルが返されると、setupControllerと関連するルートフックも再起動されます。

8
Sumit