gpt4 book ai didi

ember.js - Ember 在路由上调用刷新不会导致调用 renderTemplate

转载 作者:行者123 更新时间:2023-12-04 08:24:32 24 4
gpt4 key购买 nike

我想让页面在 Controller 模型的属性更新后自动刷新。

我正在遵循这个提示:How to reload current route in Ember.js?

所以,我的 Controller 中有一个 Action 方法“runSimulation”,在它的最后我有这一行:

this.send("sessionChanged");

在相关 route ,我有:
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 被打印(意思是: Controller 发送的“sessionChanged”事件被路由对象中的处理程序成功捕获)......但我没有看到 DINGDONG 被打印。

我正在使用 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 文档 ...

Refresh the model on this route and any child routes, firing the beforeModel, model, and afterModel hooks in a similar fashion to how routes are entered when transitioning in from other route. The current route params (e.g. article_id) will be passed in to the respective model hooks, and if a different model is returned, setupController and associated route hooks will re-fire as well.



所以......也许我的问题归结为......:应该满足什么条件才能让路由的刷新方法返回isActive为真的转换?

我正在使用 ember 1.10.0

谢谢,
拉卡

更新

我把这个链接放在这里...,以防它在分析情况时提供一些帮助: http://blog.trackets.com/2013/02/08/router-request-lifecycle.html

最佳答案

不知道为什么refresh不会重新渲染,但你为什么不直接调用 renderTemplate你自己?

但更基本的是,这是一种反模式。您实际上是在尝试管理自己的子路由,每个子路由都有自己的模板,方法是记住您想要哪一个,然后在正确的那个上调用自己的渲染。但这就是 Ember 路由器的谋生手段。只需创建多个子路由——一个用于 crear-simulation,一个用于 show-simulation,然后让 Ember 完成工作。

假设你想以这种方式做事,交换模板进出,你的方法仍然不是很像 Ember。您应该使用 templateName路线上的属性(property)。放置一个观察者来调用默认的renderTemplate当它改变时。摆脱您的自定义renderTemplate

关于ember.js - Ember 在路由上调用刷新不会导致调用 renderTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com