Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Ember.js中重新加载当前路由?_Javascript_Ember.js - Fatal编程技术网

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

Javascript 如何在Ember.js中重新加载当前路由?,javascript,ember.js,Javascript,Ember.js,在Ember.js中,我有一个带有模型的路由。当我在路由播放列表上时,您能帮助我如何重新加载通过另一个JS函数回调调用的路由(或将新数据设置为模型)吗?我一直在寻找文档这么长时间,但没有帮助我 App.PlaylistRoute = Ember.Route.extend({ setupController: function(controller, model) { $.getJSON('api/playlist.php?' + Math.random().toString(36), fu

在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);
  });
 }
});
非常感谢

从控制器使用:

从路线使用:

例如,假设您的控制器上有一个操作

App.PlaylistController = Ember.ArrayController.extend({
 actions: {
   grabNewModel: function(){
     //get some new model
     this.transitionToRoute('playlist', newModel);
   }
 }
});

答案中的解决方案似乎不适用于当前路线。 我也遇到了同样的问题,在这里尝试了解决方案,效果很好

在你的路线上

actions: {
  sessionChanged: function() {
    this.refresh();
  }
}
在你的控制器里

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

有两种方法

一种是在播放列表路由中写入一个操作,并在其中调用此.refresh() 有关详细信息,请访问路线的余烬向导方法

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

this.get('target.target.router').refresh();
这两种方法中的任何一种都可以帮助您刷新路线

actions: {
  sessionChanged: function() {
    this.refresh();
  }
}
下面是《灰烬指南》中关于刷新方法的小说明:

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


Ember.Controller.TransitionRoute似乎没有重新加载当前路由。我有一个LOG_TRANSITIONS_INTERNAL on,它所做的一切都是“尝试转换到索引”并完成。现在进入TransitionRoute代码…您需要将其发送到另一个模型,如果您发送的是当前模型,则没有合法的理由重新加载路由。您试图实现什么?用例:当您在route“/foos”中将您的模型定义为一个列表(例如,使用ember data的
findQuery
)时,在另一个route“/foos/new”中创建同一类的模型,然后使用
route#transitiono
,重定向回“/foos”,新创建的模型不会出现,因为在“/foo”上既没有执行
model()
hook,也没有执行
setupController()
。当使用带有动态段的路线并运行到'foo',23上时,可以观察到这种行为。那么,我们如何强制“/foo”路由重新加载其
模型()
?^^^^^这是一个糟糕的解决方案。它会起作用,但却破坏了余烬的一个主要目的,那就是为你处理所有这类垃圾。如果这个新记录应该是多个集合的成员,该怎么办?上述解决方案需要对需要插入新记录的每个位置都有深入的了解,而只需重新加载路由即可自动处理所有问题。此外,如果服务器上有一条客户机还没有的新记录,而我们只是想确保有新的数据,该怎么办?或者,如果路由的模型是一个包含多个记录或集合的散列,那么不管答案是在什么时候写的,这确实是一个糟糕的解决方案。如上所述,它将起作用,在当时可能是唯一的选择,但不再是一个好的解决方案。我也没有否决你或你的答案,所以冷静点。:)不幸的是我试过了,什么也没发生。我没有在路线上使用任何模型,我只需要它来重新渲染;但似乎什么都不起作用。路由文件中的所有内容都是相同的:``afterModel(){this.get('session')。on('sessionAuthenticated',()=>{this.refresh();});}``完美。注意,
this.send(“sessionChanged”)行将单独从控制器中的任何位置触发刷新。重要提示:控制器的操作和路由器的操作不能具有相同的名称注意:对我来说,它是
this.get('target.router').refresh()
。此外,在路由上调用
refresh
似乎是在刷新正在刷新的路由的父路由和子路由(因此刷新会一直冒泡到应用程序路由)。第三种方法是使用此.model.set()更改数据,并让模板随之更改。e、 g this.playlist.set('content',newplaylist)(假设为ArrayProxy)。
this.get('target.target.router').refresh();