gpt4 book ai didi

javascript - 为什么我需要调用动态路由 ":_id"而不是我想要的任何内容?

转载 作者:行者123 更新时间:2023-12-03 10:16:13 25 4
gpt4 key购买 nike

这是在 Iron Router 中设置路由的相当标准的方法:

Router.route('/posts/:_id', {
name: 'postPage',
data: function() { return Posts.findOne({_id: this.params._id}) }
});

作为一个初学者,我尝试了一下:

Router.route('/posts/:whatever', {
name: 'postPage',
data: function() { return Posts.findOne({_id: this.params.whatever}) }
});

在某种程度上,这很有效。确实,whatever 会将 /posts/ 之后的任何内容作为其值,并且数据上下文确实会与之前相同...但现在链接到特定帖子行不通!

所以,

<a href="{{pathFor 'postPage'}}">{{title}}</a>

按照“我的”方式根本行不通(根本不链接到任何内容)。

我无法完全理解这一点,而且我是一个新手,无法掌握 Iron Router 的源代码,所以我希望这里有人能够以即使是初学者也喜欢的方式解释它我能理解。

最好是这样的:

  1. 第一个 {{pathFor 'postPage'}} 在路由中查找名为 postPage 的路由。

  2. 它发现该路由对应于 /posts/,后跟其他内容。

  3. 查看数据上下文,发现只返回一篇文章,即与 /posts/ 之后的内容具有相同 _id 的文章。

  4. 它知道自己应该链接到这篇文章,巧妙地将 URL 设置为 /posts/_id

这很可能是错误的,并且它没有解释为什么当 whatever 转换为 _id 时它会起作用。但以类似的方式解析它会对我有很大帮助。

编辑:清理我的问题,使其更容易理解。

最佳答案

有一组简单的情况会导致困惑:

  1. Posts.findOne 问题的解释是,第一个参数可以是选择器或文档 _id。所以它并不是真正的快捷方式,而是 documented feature .
  2. 正如您所发现的,将 :something 放入iron:router URL 中会导致该值在路由函数内报告为 this.params.something。这something注册为该路由的参数,这让我们了解pathFor的工作原理。
  3. pathFor 帮助器接受两个输入:第一个是路由名称(在本例中为 'postPage'),第二个是参数对象,该对象可以来自第二个参数如 {{pathFor 'postPage' params}} 或来自数据上下文,如下所示:{{#with params}}{{pathFor 'postPage'}}{{/与}}

现在,这就是为什么如果您调用参数 _id 则可以从数据库传入文档,但如果调用 whatever 则不行:您从中检索的 post 对象数据库有一个 _id 字段,但没有 whatever 字段。因此,当您将其传递给 pathFor 时,如果路由的参数也恰好称为 _id,它只会传递正确的 _id

请告诉我这是否有意义,我同意这有点令人困惑,并且这个“快捷方式”隐藏了 pathForparams 实际执行的操作。

关于javascript - 为什么我需要调用动态路由 ":_id"而不是我想要的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860271/

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