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

Pet*_*ses 2 node.js express handlebars.js handlebarshelper express-handlebars

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

辅助功能

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

我的看法

<a href="{{url 'samples/'+this.name+'/'+this.class+'/'+this.id}}">{{this.name}}</a>
Run Code Online (Sandbox Code Playgroud)

Jul*_*tel 5

要实现此目的,您可以做的是创建一个帮助器来连接字符串并将连接后的字符串传递给该url帮助器。

在 JavaScript 中,每个非箭头函数都有一个名为arguments分配对象的局部变量,在这个对象中你会发现(你猜对了)调用函数时传递给函数的参数。

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

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

Handlebars.registerHelper('concat', function() {
    return [...arguments].join('');
});
Run Code Online (Sandbox Code Playgroud)

但为什么会这么简单,对吧?

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

为了在记住这一点信息的情况下完成这项工作,我们必须对数组进行切片,以便删除最后一个元素,然后将其连接起来。

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

我们现在有了一个助手,我们可以用它来连接我们想要的任何内容,剩下要做的唯一的事情就是将其传递给另一个助手,即url本例中的助手。

{{url (concat 'samples/' this.name '/' this.class '/' this.id)}}
Run Code Online (Sandbox Code Playgroud)

^ 我发现在 GitHub 问题上发现了有关链接助手的评论,并且 Handlebars.js 显然对此有本机支持。

我希望这对你有所帮助,并且我没有在没有正确解释的情况下用勺子喂太多东西。