首页 > 解决方案 > 如何在车把视图中连接字符串

问题描述

我写了一个辅助函数来帮助我格式化 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>

标签: node.jsexpresshandlebars.jsexpress-handlebarshandlebarshelper

解决方案


你可以做的是创建一个助手来连接你的字符串并将连接的字符串传递给url助手。

在 JavaScript 中,每个非箭头函数都有一个名为argumentsassign 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)}}

^ 我在 GitHub 问题上找到了一条关于链接助手的评论,并且 Handlebars.js 显然对此具有原生支持。

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


推荐阅读