如何使用Handlebars.js将字段转换为小写?

44

我想做类似这样的事情:

{{user.name.toLowerCase()}}

但是我遇到了这个错误:

Error: Parse error on line X:
...tatus {{user.name.toLowerCase()}}">  
-----------------------^
Expecting 'ID', got 'undefined'
5个回答

81

如文档所述(链接)

Handlebars.registerHelper('toLowerCase', function(str) {
  return str.toLowerCase();
});

只需要像这样使用它:

<h1>By {{toLowerCase author}}</h1>

我该如何在express-handlebars模块中实现这个,因为那里没有定义Handlebars? - ssomename

20

如果你只是想在HTML中以小写形式显示一些文本(无论这是否由handlebars生成),你可以使用CSS并应用text-transform,例如:

.css-class-here {
    text-transform: lowercase;
}

4
或者相反:.all-caps { text-transform: uppercase; } 意思是将文本中的所有字母转换为大写字母。 - rmcsharry

16

我创建了以下辅助函数,但我想知道是否有更好的解决方案。

Handlebars.registerHelper('toLowerCase', function(value) {
    if(object) {
        return new Handlebars.SafeString(value.toLowerCase());
    } else {
        return '';
    }
});

3
为什么在这里要使用SafeString?任何HTML都应该被转义。 - Michael Mior
12
在 if 语句中,你正在检查未声明的 "object" 变量,不管怎样,我认为它可以重写成一行 return (value && typeof value === 'string') ? value.toLowerCase() : ''; - Peter Pajchl
@PeterPajchl return (str && typeof str === 'string' && str.toUpperCase()) || '' 比三元操作符更快。 - Laode Muhammad Al Fatih

11

同时检查并确保它是一个字符串,如果不是则返回空。

Handlebars.registerHelper('lowercase', function (str) {
  if(str && typeof str === "string") {
    return str.toLowerCase();
  }
  return '';
});

用法:

// now let's pass a string or variable to our helper
{{lowercase 'MY NAME IS'}}

输出:

my name is

9

@Eric之前的回答现在好像不起作用了,我的解决方案非常类似,但是在新版本的handlebars中helpers的定义可能有所变化:

Handlebars.registerHelper('tolower', function(options) {
    return options.fn(this).toLowerCase();
});

在模板中

<img src="/media/images/modules/{{#tolower}}{{name}}{{/tolower}}.png"...

干杯


3
不错,但使用块助手有些过度,会使模板难以阅读。我认为 Cyril 的回答更好。 - Lambart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接