gpt4 book ai didi

ember.js - 为什么嵌套资源路由会重置 Ember 中的命名空间?

转载 作者:行者123 更新时间:2023-12-01 23:55:47 24 4
gpt4 key购买 nike

假设我有一个Photo 模型和一个Post 模型,我希望它们都有Comment。在 Rails 中,我的路线看起来像这样:

Rails.application.routes.draw do

resources :posts, only: [ :show ] do
resources :comments, only: [ :index ]
end

resources :photos, only: [ :show ] do
resources :comments, only: [ :index ]
end
end

这会生成以下路由:

GET /posts/:post_id/comments(.:format)
GET /posts/:id(.:format)
GET /photos/:photo_id/comments(.:format)
GET /photos/:id(.:format)

好的,有道理。如果我想获取 ID 为 9PhotoComment 路径,我会使用 photo_comments (9).

如果我想在 Ember 中创建相同的路线,我会这样做:

App.Router.map () ->

@resource 'posts', ->
@resource 'post', { path: '/:post_id' }, ->
@resource 'comments'

@resource 'photos', ->
@resource 'photo', { path: '/:photo_id' }, ->
@resource 'comments'

在 Ember 中,这会生成以下 URL:

#/loading
#/posts/loading
#/posts/:post_id/loading
#/posts/:post_id
#/posts
#/photos/:photo_id/comments
#/photos/:photo_id/loading
#/photos/:photo_id
#/photos/loading
#/photos
#/
#/photos/:photo_id/loading

我还有 /posts/:posts_id/comments/photos/:photo_id/comments,这是我想要的。但是,由于 Ember 重置了命名空间,我不再有 post_commentsphoto_comments 助手。我有一个 comments 路由,路由到 /photos/:photo_id/comments,但我没有任何路由到 /posts/:posts_id/评论。我意识到我可以通过执行以下操作来解决此问题,但这似乎是多余的:

App.Router.map () ->

@resource 'posts', ->
@resource 'post', { path: '/:post_id' }, ->
@resource 'posts.comments', { path: '/comments' }

@resource 'photos', ->
@resource 'photo', { path: '/:photo_id' }, ->
@resource 'photos.comments', { path: '/comments' }

TL/DR:

我理解 Ember 会为嵌套资源重置路由,但我不明白为什么。有人可以给我解释一下吗?

最佳答案

TL;DR 资源由于过渡范式而必须是唯一的,实际上您只是在覆盖评论资源。

这是因为当您转换到路线时,您并没有明确地调出整个路径。

this.transitionTo('photo', photo);

{{#link-to 'photo' photo}} My photo{{/link-to}}

因为这个资源必须是唯一的。

如果您位于应用程序的根部并想跳到 2 层深度,您只需使用 this.transitionTo('photo', photo) 即可 使用this.transitionTo('photos.photo', photo)

如果您要转换到一个包含多个动态资源深度的资源,您只需发送多个模型即可。 this.transitionTo('foo', bar, baz)

如前所述,您可以强制人们在执行 transitionTo/link-to 时声明完整路径,但作者决定惩罚具有重复资源的少数人,而不是惩罚每个人在转换时定义整个路径。

此外,foo.bar 表示 Ember 中的 resource.route。我不认为这是为什么要按原样构建它的论据,更多的是关于它的声明。

@resource 'posts', ->
@resource 'post', { path: '/:post_id' }
@route 'foo'

this.transitionTo('posts.foo');

关于ember.js - 为什么嵌套资源路由会重置 Ember 中的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946960/

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