如何在车把视图中连接字符串

时间:2018-09-28 06:58:15

标签: node.js express handlebars.js express-handlebars handlebarshelper

我写了一个帮助函数来帮助我设置URL的格式,URL是一些对象属性的组合。如何在车把视图中连接此属性?

辅助功能

const url = (link)=>{
    return process.env.URL+'/'+link.replace(/ /gi,'-').toLowerCase();
};

我的观点

<a href="{{url 'samples/'+this.name+'/'+this.class+'/'+this.id}}">{{this.name}}</a>

1 个答案:

答案 0 :(得分:1)

您可以做的是创建一个帮助程序来连接您的字符串,然后将连接后的字符串传递给url帮助程序。

In JavaScript, every non-arrow function has a local variable named arguments assigned an object,在此对象中,您会发现(您猜对了)调用该函数时传递给该函数的参数。

使用此arguments对象,我们可以为Handlebars.js创建一个帮助器,使我们可以连接任意数量的字符串。

由于arguments对象(如文档所述)是一个类数组对象,因此我们必须根据该对象创建一个实际的数组,我们可以使用该数组将所有内容连接在一起Array.join使其尽可能简单。

Handlebars.registerHelper('concat', function() {
    return [...arguments].join('');
});

但是为什么会那么简单,对吧?

在尝试此解决方案时,我发现arguments对象中的最后一个元素是一个对象,其中包含有关所使用的助手的一些信息,例如名称。

要在进行此操作时考虑到一点点信息,我们必须对数组进行切片,以便删除最后一个元素,然后将其连接起来。

Handlebars.registerHelper('concat', function() {
    arguments = [...arguments].slice(0, -1);
    return arguments.join('');
});

我们现在有了一个可以用来连接所需对象的助手,剩下要做的就是将其传递给另一个助手,在这种情况下为url助手。

{{url (concat 'samples/' this.name '/' this.class '/' this.id)}}

^我发现a comment on an GitHub issue regarding chaining helpers,并且Handlebars.js显然对此具有本地支持。

我希望这会有所帮助,并且我不会在没有正确解释的情况下过多喂食。