车把的IF值包含x.* [英] Handlebars IF value contains x.*

查看:48
本文介绍了车把的IF值包含x.*的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我解析到模板中的某些JSON时遇到问题.本质上,我正在通过一个简单的Web界面构造查询,以JSON格式提取数据,并使用Mustache控制数据/模板.

I have an issue with some JSON I'm parsing into a template. Essentially, I'm constructing a query via a simple web interface, pulling back data in JSON format, and controlling the data/template with Mustache.

但是,我无法通过URL查询JSON中的嵌套对象的值...所以我认为我需要诉诸使用Handlebars的条件语句.

However, I'm unable to query values on nested objects in the JSON via the URL...so I think I need to resort to conditional statements using Handlebars.

是否可以使用通配符在车把块帮助器中运行 like indexof 样式比较?

Is it possible to run a like or indexof style comparison in an handlebars block helper using wildcards?

{{#if folderPath == "content/published/.*"}}
 Render content
Else, do nothing

感谢任何帮助,谢谢

推荐答案

我知道我来晚了一些,但我偶然发现了这一点,它应该有一个答案.我为此写了一个助手.

I know I'm a little late, but I stumbled across this and it should have an answer. I wrote a helper for this that works.

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);
});

模板应如下所示(表达式

仅在找到内容/已发布"的情况下才会返回内容".不需要通配符.

This will only return "something" if the "content/published" is found. No need for wildcards.

这可以用作使用"else"的开关盒.我对文档中的这一部分不清楚.对某人有用.

This can be used as a sort of switch case using "else". This part wasn't clear to me in the documentation. Should be useful to someone.

{{#contains "content/published" folderPath}}
    Something
{{else contains "content/something" folderPath}}
    Something else
{{else}}
    Something else v2
{{/contains}}


对于使用 express-handlebars 的用户,您的实现应如下所示(在 RegisterHelpers.js ):


For those using express-handlebars, your implementation will look like this(in 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);

这篇关于车把的IF值包含x.*的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆