【问题标题】:How Do I Use a Meteor Template Helper to Edit a Value Passed as a Parameter in Iron-Router?如何使用 Meteor 模板助手编辑 Iron-Router 中作为参数传递的值?
【发布时间】:2025-07-09 14:45:01
【问题描述】:

如何使用 template-helper 来编辑我传递给使用 iron-router 的 pathFor 方法创建的路由的参数值???

我有这个模板助手:

Template.registerHelper('slugify', function(obj){
  return _.slugify(obj);
});

在我的 .html 文件中,我有这个:

{{#each menuItemsFromDB}}
          {{#each arrayOfMenuItems}}
          <a class="item category" href="">
          {{this}}
          </a>
          {{/each}}
{{/each}}

上面代码中的{{this}}返回一个字符串,即类别的名称。 因为我已经注册了一个模板助手,所以我可以通过以下方式 SLUGIFY 这个类别:

{{slugify this}}

然后我有这条路线:

this.route('List',{
    path: '/list/:category_slug',
    template: 'list',
    controller: 'ListController'
  });

我可以链接到这条路线并通过以下方式将参数传递给这条路线:

{{pathFor 'List' category_slug='the-value-i-passed'}}

但这将是硬编码,无法达到我想要的结果。
我希望它是动态的,通过使用'slugify' 模板助手和 Iron-router 的pathFor 方法并使用{{this}} 的值。

我想要实现的是这样的,尽管下面的代码不起作用:

{{pathFor 'List' category_slug={{slugify this}} }}

用上面的行来实现我“试图”实现的目标是什么??

我希望我能做这样的事情:

{{pathFor 'List' category_slug=slugify(this) }}

{{pathFor 'List' category_slug='{{slugify this}}' }}

【问题讨论】:

    标签: javascript meteor iron-router spacebars


    【解决方案1】:

    长话短说,您要查找的内容尚未使用当前语法实现,尽管它是 Meteor Spacebars 所基于的 Handlebars 标准实现的一部分。

    目前,您必须创建一个单独的助手来处理您的输入并在 pathFor 中调用它。

    JS

    Template.myTemplate.helpers({
      slugified: function(){
        return _.slugify(this);
      }
    });
    

    空格键

    {{pathFor 'List' category_slug=slugified}}
    

    请注意,Handlebars 子表达式支持计划在不久的将来,甚至可能会根据此 PR:https://github.com/meteor/meteor/pull/4101

    进入 Meteor 的下一个版本

    【讨论】: