handlebars.js {{#if}} 条件中的长度检查
Length check in a handlebars.js {{#if}} conditional
handlebars 中是否有检查值长度的方法?像这样:
{{#if value.length > 20}
...do something
{{else}}
...do something else
{{/if}}
像下面这样创建 Handlebars 助手:-
Handlebars.registerHelper('checklength', function (v1, v2, options) {
'use strict';
if (v1.length>v2) {
return options.fn(this);
}
return options.inverse(this);
});
并像这样使用:-
{{#checklength jobTitle 20}} //jobtitle is property and 20 is length
<p>Up to 20</p>
{{else}}
<p>Less then 20</p>
{{/checklength}}
只是想改进接受的答案,这是非常正确和有帮助的,但是...
与其专门针对某些长度制作它,不如将其制作成大于条件并在其他大于的情况下使用它。
Handlebars.registerHelper('greaterThan', function (v1, v2, options) {
'use strict';
if (v1>v2) {
return options.fn(this);
}
return options.inverse(this);
});
并像这样使用:
{{#greaterThan jobTitle.length 20}}
<p>Up to 20</p>
{{else}}
<p>Less then 20</p>
{{/greaterThan}}
这样你就可以比较很多不同的东西,而不仅仅是长度。
你也可以更进一步,让我们考虑一下,我们可能想要检查某物是否小于某物或等于某物。
Handlebars.registerHelper('compare', function (v1, operator, v2, options) {
'use strict';
var operators = {
'==': v1 == v2 ? true : false,
'===': v1 === v2 ? true : false,
'!=': v1 != v2 ? true : false,
'!==': v1 !== v2 ? true : false,
'>': v1 > v2 ? true : false,
'>=': v1 >= v2 ? true : false,
'<': v1 < v2 ? true : false,
'<=': v1 <= v2 ? true : false,
'||': v1 || v2 ? true : false,
'&&': v1 && v2 ? true : false
}
if (operators.hasOwnProperty(operator)) {
if (operators[operator]) {
return options.fn(this);
}
return options.inverse(this);
}
return console.error('Error: Expression "' + operator + '" not found');
});
使用上面的帮助器,我们可以比较各种可能发生的情况。
{{#compare jobTitle.length '>' 20}}
{{#compare jobTitle.length '<=' 100}}
<p>Greater than 20 and less than or equal 100</p>
{{else}}
<p>Greater than 100</p>
{{/compare}}
{{else}}
<p>Less than or equal to 20</p>
{{/compare}}
如果您发现很难理解这个助手的工作原理,请尝试阅读 Todd Mottos article 关于使用对象字面量而不是 switch 语句的内容。
不清楚你的value
是什么,字符串还是数组?
如果是数组,就不需要帮手了!您可以检查 length
处的项目是否存在:
{{#if items.[20]}}
这是一个工作示例,如果用户有 一个 个项目,而不是多个项目:
{{#if items.[1]}}
You have the following items:
{{#each items}}
* {{this}}
{{/each}}
{{else}}
You have one item: {{items.[0]}}
{{/if}}
在 http://tryhandlebarsjs.com/ 尝试使用
等示例数据
{
items: ["foo", "bar"]
}
不需要助手对于在邮件投递服务(Sparkpost、Sendgrid、Mandrill 等)的动态模板中使用 Handlebars 非常重要,这些服务不允许定义助手(尽管 Sparkpost 的语法比 Sendgrid 丰富得多) .
handlebars 中是否有检查值长度的方法?像这样:
{{#if value.length > 20}
...do something
{{else}}
...do something else
{{/if}}
像下面这样创建 Handlebars 助手:-
Handlebars.registerHelper('checklength', function (v1, v2, options) {
'use strict';
if (v1.length>v2) {
return options.fn(this);
}
return options.inverse(this);
});
并像这样使用:-
{{#checklength jobTitle 20}} //jobtitle is property and 20 is length
<p>Up to 20</p>
{{else}}
<p>Less then 20</p>
{{/checklength}}
只是想改进接受的答案,这是非常正确和有帮助的,但是...
与其专门针对某些长度制作它,不如将其制作成大于条件并在其他大于的情况下使用它。
Handlebars.registerHelper('greaterThan', function (v1, v2, options) {
'use strict';
if (v1>v2) {
return options.fn(this);
}
return options.inverse(this);
});
并像这样使用:
{{#greaterThan jobTitle.length 20}}
<p>Up to 20</p>
{{else}}
<p>Less then 20</p>
{{/greaterThan}}
这样你就可以比较很多不同的东西,而不仅仅是长度。
你也可以更进一步,让我们考虑一下,我们可能想要检查某物是否小于某物或等于某物。
Handlebars.registerHelper('compare', function (v1, operator, v2, options) {
'use strict';
var operators = {
'==': v1 == v2 ? true : false,
'===': v1 === v2 ? true : false,
'!=': v1 != v2 ? true : false,
'!==': v1 !== v2 ? true : false,
'>': v1 > v2 ? true : false,
'>=': v1 >= v2 ? true : false,
'<': v1 < v2 ? true : false,
'<=': v1 <= v2 ? true : false,
'||': v1 || v2 ? true : false,
'&&': v1 && v2 ? true : false
}
if (operators.hasOwnProperty(operator)) {
if (operators[operator]) {
return options.fn(this);
}
return options.inverse(this);
}
return console.error('Error: Expression "' + operator + '" not found');
});
使用上面的帮助器,我们可以比较各种可能发生的情况。
{{#compare jobTitle.length '>' 20}}
{{#compare jobTitle.length '<=' 100}}
<p>Greater than 20 and less than or equal 100</p>
{{else}}
<p>Greater than 100</p>
{{/compare}}
{{else}}
<p>Less than or equal to 20</p>
{{/compare}}
如果您发现很难理解这个助手的工作原理,请尝试阅读 Todd Mottos article 关于使用对象字面量而不是 switch 语句的内容。
不清楚你的value
是什么,字符串还是数组?
如果是数组,就不需要帮手了!您可以检查 length
处的项目是否存在:
{{#if items.[20]}}
这是一个工作示例,如果用户有 一个 个项目,而不是多个项目:
{{#if items.[1]}}
You have the following items:
{{#each items}}
* {{this}}
{{/each}}
{{else}}
You have one item: {{items.[0]}}
{{/if}}
在 http://tryhandlebarsjs.com/ 尝试使用
等示例数据{
items: ["foo", "bar"]
}
不需要助手对于在邮件投递服务(Sparkpost、Sendgrid、Mandrill 等)的动态模板中使用 Handlebars 非常重要,这些服务不允许定义助手(尽管 Sparkpost 的语法比 Sendgrid 丰富得多) .