33

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);
  });
 }
});

どうもありがとう!

4

4 に答える 4

77

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

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"),
于 2014-05-12T18:15:30.820 に答える
9

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

1 つは、プレイリスト ルートにアクションを記述し、その中で this.refresh() を呼び出すことです。詳細については、ルートの Ember ガイドの更新方法を参照してください。

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

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

2 つのうちのいずれかが、ルートを更新するのに役立ちます。

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

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

于 2015-11-18T06:47:30.353 に答える
7

コントローラの使用から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);
   }
 }
});
于 2014-01-31T14:26:36.637 に答える