在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');
}
注意:这将把操作发送到调用的控制器的相应路由,并仅更新该路由和任何子路由。