aot*_*otu 3 wildcard conditional-statements mustache
我在解析模板时遇到一些 JSON 问题。本质上,我通过一个简单的 Web 界面构建查询,以 JSON 格式拉回数据,并使用 Mustache 控制数据/模板。
但是,我无法通过 URL 查询 JSON 中嵌套对象的值...所以我认为我需要使用 Handlebars 求助于条件语句。
是否可以使用通配符在车把块助手中运行like或样式比较?indexof
IE
{{#if folderPath == "content/published/.*"}}
 Render content
Else, do nothing
感谢任何帮助,谢谢
我知道我有点晚了,但我偶然发现了这个,它应该有一个答案。我为此编写了一个有效的助手。
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}}
如果找到“content/published”,这只会返回“something”。不需要通配符。
这可以用作一种使用“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);