如何在ember.js中重新加载当前路线



在ember.js中,我有型号的路线。当我在路线播放列表上如何重新加载此路线(或将新数据设置为模型)时,您可以帮助我吗?我一直在寻找很长时间的文档,但对我没有帮助。

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

非常感谢!

似乎答案中的解决方案对于当前路线不起作用。我遇到了同样的问题,在这里尝试了解决方案并起作用。

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

在您的路线中。

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

和在您的控制器中。

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

有两种方法。

一个人是在播放列表路线上写下动作,然后在其中拨打this.fresh()有关更多信息,您可以访问Ember指南的刷新方法。

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

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

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

以下来自Ember Guides的刷新方法的小笔记:

刷新该路线上的模型和任何子路由,以类似于从其他路线过渡时输入路线的方式,以类似的方式启动beforemodel,型号和后代挂钩。当前的路由参数(例如,present_id)将传递到相应的模型钩,如果返回了不同的模型,则设置controller和关联的路由挂钩也将重新开火。

来自控制器使用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);
   }
 }
});

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

在路线中

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

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

this.send('refreshModel');

例如:

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

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

最新更新