【问题标题】:Iron-router nested routes with multiple parameters具有多个参数的 Iron-router 嵌套路由
【发布时间】:2014-06-30 11:23:07
【问题描述】:

我有两个模型:sitesarticles。每个站点可以有多篇文章。我想在这样的路由中查看文章:/siteName/articleFriendlyTitleUrl。目前我有帮助方法来制作这样的友好网址:

getFriendlyUrl = function(urlString){
  urlString = urlString.toLowerCase();
  urlString = str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-');
  return urlString;
}

还有我的router.js 文件:

this.route('showArticle', {
  path: '/article/:title'),
  layoutTemplate: 'artLayout',
  data: function(){
  viewData = {
    title: Articles.findOne({title: this.params.title}),
    site:  Sites.findOne({name: this.name})
  }
  return viewData;
});

有人知道如何实现吗?我也试过实现这条路:

/:siteName/:articleId

但没有成功 - 有什么建议吗?

【问题讨论】:

  • 我认为您需要在每篇文章中存储可以构成 URL 一部分的“友好标题”。然后按照您的路线参数中给出的名称查找文章。

标签: routing meteor iron-router


【解决方案1】:

我建议将 slug 保存在文章文档中。 当用户添加/编辑文章时,应用可以使用 Underscore.String.slugify 函数(https://github.com/epeli/underscore.string)从标题生成 slug。

多参数路由有效:

this.route('showArticle', {
  path: '/:siteName/:articleSlug'),
  ...
  data: function(){

     viewData = {
       title: Articles.findOne({slug: this.params.articleSlug}).title,
       site:  Sites.findOne({name: this.params.siteName})
     }
     return viewData;
  }
});

【讨论】:

    【解决方案2】:

    最后我解决了这个问题:我已经按照建议添加了friendlyTitle 字段到来自Articles 集合的对象,该集合包含已解析的文章标题(没有特殊字符)。

    这是我的路线:

    this.route('showArticle', {
        path: '/:site/:friendlyTitle',
        layoutTemplate: 'artLayout',
        data: function(){
            return Articles.findOne({friendlyTitle: this.params.friendlyTitle});
        }
    });
    

    :site 字段包含来自Sites 集合中分配了这篇文章的对象的名称(创建新文章时,我可以将其分配/发布到/在特定站点上)。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2014-03-13
      • 1970-01-01
      • 2018-06-26
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2018-01-11
      相关资源
      最近更新 更多