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

有两种方法可以做到这一点。

一种是在播放列表路由中编写一个动作并在其中调用 this.refresh() 有关更多信息,您可以访问 Ember Guide的路由刷新方法。

另一种方法是在您的控制器中,具体取决于您需要重新加载路线使用的情况

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

两者中的任何一个都可以帮助您刷新路线。

下面是来自 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 回答
0

在搜索如何刷新当前接受的答案已过时的路线时,此答案首先出现在谷歌上。如果您确实需要刷新路由并从控制器中的操作再次执行模型挂钩操作,请使用以下命令:

在路线中

@action
refreshModel() {
  this.refresh();
}

为了在控制器中调用此操作,请使用

this.send('refreshModel');

例如:

@action
performUpdate(event) {
  event.preventDefault();
  // Perform necessary action
  this.send('refreshModel');
}

注意:这会将操作发送到调用它的控制器的相应路由,并仅更新该路由和任何子路由。

于 2021-07-05T16:28:39.900 回答