繁体   English   中英

如何在 Ember.js 中重新加载当前路由?

[英]How to reload current route in Ember.js?

在 Ember.js 我有 model 的路线。你能帮我吗,当我在路线播放列表时如何重新加载这条路线(或将新数据设置为模型)由另一个 JS function 的回调调用? 我一直在寻找文档,但对我没有帮助。

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.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"),

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

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

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

另一种方法是在您的控制器中,根据您需要重新加载路线使用情况

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

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

以下来自ember指南的一小部分刷新方法:

刷新此路径和任何子路径上的模型,以类似于从其他路径转换时输入路径的方式触发beforeModel,model和afterModel挂钩。 当前路由参数(例如article_id)将被传递到相应的模型钩子,如果返回不同的模型,setupController和相关的路径钩子也将重新激活。

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

在路线中

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

为了在 controller 使用中调用此操作

this.send('refreshModel');

例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM