我知道我来晚了,但我偶然发现了这个,它应该有答案。我为此写了一个帮手。
Handlebars.registerHelper('contains', function(needle, haystack, options) {
needle = Handlebars.escapeExpression(needle);
haystack = Handlebars.escapeExpression(haystack);
return (haystack.indexOf(needle) > -1) ? options.fn(this) : options.inverse(this);
});
模板应如下所示(表达式、块助手)
{{#contains "content/published" folderPath}}
something
{{/contains}}
如果找到“内容/已发布”,这只会返回“某物”。不需要通配符。
这可以用作一种使用“else”的开关盒。这部分在文档中对我来说并不清楚。应该对某人有用。
{{#contains "content/published" folderPath}}
Something
{{else contains "content/something" folderPath}}
Something else
{{else}}
Something else v2
{{/contains}}
对于那些使用express-handlebars的人,您的实现将如下所示(在RegisterHelpers.js中):
var register = function(Handlebars) {
var helpers = {
if_op: (a, op, b, options) =>{
switch (op) {
case '!=': return (a != b) ? options.fn(this) : options.inverse(this);
case '!==': return (a !== b) ? options.fn(this) : options.inverse(this);
case '>=': return (a >= b) ? options.fn(this) : options.inverse(this);
case '<=': return (a <= b) ? options.fn(this) : options.inverse(this);
case '==': return (a == b) ? options.fn(this) : options.inverse(this);
case '===': return (a === b) ? options.fn(this) : options.inverse(this);
case '>': return (a > b) ? options.fn(this) : options.inverse(this);
case '<': return (a < b) ? options.fn(this) : options.inverse(this);
default: return options.fn(this);
}
},
contains: (Needle, Haystack, options) => {
Needle = Handlebars.escapeExpression(Haystack);
Haystack = Handlebars.escapeExpression(Haystack);
return (Haystack.indexOf(Needle) > -1) ? options.fn(this) : options.inverse(this);
}
}
if (Handlebars && typeof Handlebars.registerHelper === "function") {
for (var prop in helpers) {
Handlebars.registerHelper(prop, helpers[prop]);
}
} else {
return helpers;
}
}
module.exports.register = register;
module.exports.helpers = register(null);