【发布时间】:2015-03-15 11:47:08
【问题描述】:
我正在从我的 ajax 调用中返回一些静态 json,以在 bakend 准备好之前进行测试。当我从某个函数使用 transitionToRoute 时,我可以看到路由的模型钩子并不总是被调用。我猜它正在缓存静态 json,我看到路由渲染正确。但是我还在 setUpController 钩子中设置了控制器的其他一些属性,当模型钩子没有被调用时,这些属性也不会被执行。
每当我更改此路线时,都需要设置此变量。如果 setUpController 不是设置它的地方,我应该在哪里设置它。因此,当 ember 不调用模型挂钩作为缓存过程的一部分时,它不会设置失败。
setupController : function(controller, model ) {
controller.set('isEditing',false);
controller.set('messages', model.messages);
controller.set('params', this.get('params'));
console.log('Set Up controller' );
},
model: function( routeParams) {
this.set('params',routeParams);
// return data omitted code
});
}
所以当模型钩子被绕过时,isEdiding 字段不会被设置。一种解决方案是在像这样过渡之前设置它
this.controllerFor("messages").set('isEditing',false);
// then do tranisitioning
有没有更好的方法来实现同样的目标?理想情况下,如果在 Ember 中正确完成此变量设置,应该在哪里完成?
【问题讨论】:
-
你能在这里复制你的问题吗? emberjs.jsbin.com/nazubi/1/edit?html,js,console,output
-
当您使用 transitionTo/transitionToRoute 并提供模型时,不会调用模型挂钩。 setupController 仅在该路由尚未出现在页面上,或者该路由(或父路由)的模型发生更改时才被调用。
-
@Kalman 嗨,我相信我错误地陈述了这个问题。因此,我确实相信,如果没有更改路线的动态分段,则不会发生自我转换。所以在那种情况下,transitionToRoute 基本上不会调用模型钩子。但是,更改其中一个动态段会触发 transitionToRoute 导致通过模型和控制器钩子。我可能错了,但在我看来这是默认的 ember 路由行为。
标签: ember.js routing transitions