【发布时间】:2015-04-15 08:08:33
【问题描述】:
我想让页面在控制器模型的属性更新后自动刷新。
我正在关注这个提示:How to reload current route in Ember.js?
所以,我的控制器中有一个动作方法“runSimulation”,在它的最后我有这一行:
this.send("sessionChanged");
在相关路线中,我有:
actions: {
sessionChanged: function() {
console.log('YEAH');
var transition = this.refresh();
console.log(transition);
}
},
renderTemplate: function(controller, model) {
console.log('DINGDONG');
var model = this.currentModel;
if (model.simulation.params == undefined) {
this.render('gobernador/crear-simulacion');
} else {
this.render('gobernador/show-simulacion');
}
}
我可以看到 YEAH 被打印(意思是:控制器发送的“sessionChanged”事件被路由对象中的处理程序成功捕获)...,但我没有看到 DINDONG 被打印。
我正在使用 ember-cli,并且启用了日志转换。我可以在我的 javascript 控制台中看到这一点:
Transitioned into 'gobernadores.gobernador.simulacion'
(这是预期的)。我想转换到“gobernadores.gobernador.simulacion”会导致调用renderTemplate(由于某种原因这里没有发生)。
这里可能给我们一个线索的可能是执行“刷新”返回的“过渡”对象的值。就我而言,它给出了:
{state: TransitionState, intent: C, **isActive: false,** router: Router, data: Object, resolvedModels: Object…} _visibleQueryParams: Objectdata: Object, handlerInfos: Array[4], intent: C, params: Object, pivotHandler: Class, promise: PromisequeryParams: Object, resolveIndex: 4,resolvedModels: Objectrouter: Routersequence: 4, state: TransitionStatetar, getName: "gobernador.simulacion"}
这个“isActive”是假的。这可能是原因吗?如果是,为什么“isActive”是假的?
我检查了 Ember.Route::refresh (http://emberjs.com/api/classes/Ember.Route.html#method_refresh) 的 API 文档 ...
刷新此路由和任何子路由上的模型,触发 beforeModel、model 和 afterModel 钩子,其方式与从其他路由过渡时进入路由的方式类似。当前的路由参数(例如article_id)将被传递到各自的模型钩子中,如果返回不同的模型,setupController 和相关的路由钩子也会重新触发。
所以...也许我的问题归结为...:路由的刷新方法应该满足什么条件才能返回isActive为真的转换?
我使用的是 ember 1.10.0
谢谢, 拉卡
更新
我把这个链接放在这里...,以防它有助于分析情况:http://blog.trackets.com/2013/02/08/router-request-lifecycle.html
【问题讨论】:
-
我看到了完全相同的问题。我有一条没有模型的路线,我想刷新页面,导致调用 renderTemplate()。不幸的是,如果我使用 this.refresh(),它不会做任何事情。为了触发对 renderTemplate() 的调用,需要做什么?
标签: ember.js