gpt4 book ai didi

ember.js - Ember 是否应该触发链接到/转换到的所有父路由 Hook ?

转载 作者:行者123 更新时间:2023-12-01 03:48:05 24 4
gpt4 key购买 nike

我很难理解 Ember 路由器在链接到转换期间如何调用嵌套资源上的钩子(Hook)。此示例中不涉及动态段。

这是一个模仿我的应用程序的人为示例:

App.Router.map(function() {
//Modal resources
this.resource('modal', function(){

this.resource('posts', function(){
this.route('new');
this.route('edit')
});

this.resource('photos', function(){
this.route('new');
this.route('edit');
});
})

比方说,在帖子路由的 FULL PAGE RELOAD 上,我们看到 Application > Index > Modal 路由上的 beforeModel 和 afterModel 钩子(Hook)按顺序触发。不错,有道理。
Attempting URL transition to /modal/posts ember.js?body=1:3912
Transition #0: application: calling beforeModel hook ember.js?body=1:3912
Transition #0: application: calling deserialize hook ember.js?body=1:3912
Transition #0: application: calling afterModel hook ember.js?body=1:3912
Transition #0: modal: calling beforeModel hook ember.js?body=1:3912
Transition #0: modal: calling deserialize hook ember.js?body=1:3912
Transition #0: modal: calling afterModel hook ember.js?body=1:3912
Transition #0: posts: calling beforeModel hook ember.js?body=1:3912
Transition #0: posts: calling deserialize hook ember.js?body=1:3912
Transition #0: posts: calling afterModel hook ember.js?body=1:3912
Transitioned into 'posts' ember.js?body=1:3912
Transition #0: TRANSITION COMPLETE.

但是,当我单击
{{link-to 'Go to Photos' 'photos'}}

在 modal.hbs 模板或 posts.hbs 模板中,它不会通过 Application > Index > Modal Hook 序列级联。它只击中最常见的子叶钩:
Attempting transition to photos ember.js?body=1:3912
Transition #1: photos: calling beforeModel hook ember.js?body=1:3912
Transition #1: photos: calling deserialize hook ember.js?body=1:3912
Transition #1: photos: calling afterModel hook ember.js?body=1:3912
Transition #1: Resolved all models on destination route; finalizing transition.
Transitioned into 'photos' ember.js?body=1:3912
Transition #1: TRANSITION COMPLETE.

有什么好心人能弄清楚路由器应该如何工作,尤其是在链接到转换时?我希望按顺序命中所有父路由的 beforeModel/afterModel Hook 。根据我的研究(很多),Ember 应该在每次转换时自上而下地击中所有父路由 beforeModel/afterModel Hook 。

专门针对 kingpin2K 的回复进行编辑:
好的,这是有道理的,但是
App.Modal = Ember.Route.extend({

model: function(params){
//load some data that you want modal.photos to also have access to
console.log('Modal route model hit')
},

afterModel: function(model) {
this.transitionTo('modal.photos')
}
});

导航到 Modal 父路由时会调用它两次。 1) 在直接点击 Modal url 时,以及 2) 再次在 afterModel 重定向 (transitionTo modal.photos) 上。根据您的解释,模态父路由钩子(Hook)(尤其是模型钩子(Hook)!)不会在从模态(父)到 modal.photos(子)的后续转换中触发,但它们是。当您转到父“模态”路线时,您将获得两个控制台日志。

再次感谢您的帮助。

最佳答案

最容易将路由器视为堆栈,每个资源/路由在堆栈中都有一个项目。当您从一个资源移动到另一个资源时,它会从堆栈中弹出不相关的项目,然后推送尚未获取的新相关项目。

父资源不应该依赖于子资源,否则它就不是真正的父资源。考虑到这种范式,当转换到路由器中的新资源/路由时,重新获取父模型是没有意义的。

关于ember.js - Ember 是否应该触发链接到/转换到的所有父路由 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25334025/

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