如何使用Handlebars.js小写字段?

Eri*_*Red 37 javascript handlebars.js

我想做这样的事情:

{{user.name.toLowerCase()}}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Error: Parse error on line X:
...tatus {{user.name.toLowerCase()}}">  
-----------------------^
Expecting 'ID', got 'undefined'
Run Code Online (Sandbox Code Playgroud)

Cyr*_* N. 68

正如在文档中简单解释的那样:

Handlebars.registerHelper('toLowerCase', function(str) {
  return str.toLowerCase();
});
Run Code Online (Sandbox Code Playgroud)

只需像这样使用它:

<h1>By {{toLowerCase author}}</h1>
Run Code Online (Sandbox Code Playgroud)


sen*_*row 22

如果你只是试图在HTML中显示一些小写的文本(无论它是否由把手生成),你可以使用CSS并应用文本转换,如下所示:

.css-class-here {
    text-transform: lowercase;
}
Run Code Online (Sandbox Code Playgroud)

  • 或相反的:.all-caps {text-transform:uppercase; } (4认同)

Eri*_*Red 13

我创建了以下帮助器,但我很好奇是否有更好的解决方案.

Handlebars.registerHelper('toLowerCase', function(value) {
    if(object) {
        return new Handlebars.SafeString(value.toLowerCase());
    } else {
        return '';
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 在if语句中你正在检查未声明的"object"变量,反正我认为它可以在一行`return(value && typeof value ==='string')中重写?value.toLowerCase():'';` (11认同)
  • 你为什么要在这里使用`SafeString`?任何HTML都应该被转义. (3认同)

f1a*_*mes 8

来自@Eric的先前答案似乎现在不起作用,我的解决方案非常相似,但可能在新版本的把手中助手的定义有所改变:

Handlebars.registerHelper('tolower', function(options) {
    return options.fn(this).toLowerCase();
});
Run Code Online (Sandbox Code Playgroud)

并在模板中

<img src="/media/images/modules/{{#tolower}}{{name}}{{/tolower}}.png"...
Run Code Online (Sandbox Code Playgroud)

干杯

  • 很好,但使用块帮助程序是过度杀伤,并使模板更难阅读.我认为西里尔的答案更好. (2认同)

小智 7

并检查并确保它是一个字符串,如果没有返回任何内容也没有关系。

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

用法:

// now let's pass a string or variable to our helper
{{lowercase 'MY NAME IS'}}
Run Code Online (Sandbox Code Playgroud)

输出:

my name is
Run Code Online (Sandbox Code Playgroud)