2

访问 /articles 时,我有以下处理程序:

exports.articles = (function(req, res) {
    Article.find( function(err, articles){
        if(err) {
            res.send(500, { error: err });
        }

        res.render('articles', { articles: articles });
    });
});

这是相应的视图:

<section id="articles">
{{#each articles}}
    <article class="geometry">
        <h4>{{ title }}</h4>
        <hr>
        <p>{{ content }}</p>
        <!-- LINK TO ARTICLE HERE -->
    </article>
{{/each}}
</section>

我想构建那个 LINK,以便每当有人点击它时,浏览器应该导航到 /article/title-with-dashes-instead-of-spaces。基本上,我想在标题上使用 title.replace(/\s/g, '-') ,然后再将其附加到标签上。有没有办法使用把手在视图上像这样格式化它?还是应该在后端完成?

谢谢!

4

1 回答 1

2

我想它确实属于后端。在那里很容易做到:

Article.find( function(err, articles){
  if(err) {
    res.send(500, { error: err });
  }
  articles.forEach(function(article) {
    article.link = '/article/' + article.title.replace(/\s/g, '-');
  });
  res.render('articles', { articles: articles });
});

我宁愿将此代码作为方法插入Article模型中generateLink(),因为它简化了它的重用。

另一种方法是注册一个 Handlebars 助手......

Handlebars.registerHelper('articleLink', function() {
  return '/article/' + this.title.replace(/\s/g, '-');
});

...然后在模板中使用它:

<article class="geometry">
  <h4>{{ title }}</h4>
  <hr>
  <p>{{ content }}</p>
  <a href="{{ articleLink }}">Link</a>
</article>
于 2013-09-18T20:46:56.517 回答