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);
});
}
});
どうもありがとう!
コントローラから 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);
}
}
});
答えの解決策は現在のルートでは機能しないようです。私は同じ問題を抱えており、ここで解決策を試してみましたが、うまくいきました。
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"),
それを行うには2つの方法があります。
1つは、プレイリストルートにアクションを記述し、その中にthis.refresh()を呼び出すことです。詳細については、Ember Guide refresh routeのメソッドをご覧ください。
もう1つの方法は、ルートの使用をリロードする必要がある状況に応じて、コントローラー内にあります
this.get('target.target.router').refresh();
2つのいずれもルートの更新に役立ちます。
emberガイドからの以下の更新方法の小さなメモ:
このルートとすべての子ルートでモデルを更新し、他のルートから移行するときのルートの入力方法と同様の方法で、beforeModel、model、afterModelフックを起動します。現在のルートパラメーター(article_idなど)はそれぞれのモデルフックに渡され、異なるモデルが返されると、setupControllerと関連するルートフックも再起動されます。