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

How do I concatenate a string in handlebars view

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

你可以做的是创建一个帮助程序来连接你的字符串并将连接的字符串传递给 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 显然对此有原生支持。

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