javascript - Handlebars 中的条件部分

标签 javascript templates ember.js handlebars.js

我尝试将以下数据输入 Handlebar 模板

{
    "set-group": [
        {
            "label": "Source Data",
            "type": "select",
            "options": [
                {
                    "value": "Default Selections"
                },
                {
                    "value": "Other Selections"
                }
            ]
        },
        {
            "label": "Scale",
            "type": "radio",
            "options": [
                {
                    "value": "log",
                    "label": "Log",
                    "groupname": "group2"
                },
                {
                    "value": "linear",
                    "label": "Linear",
                    "groupname": "group2"
                }
            ]
        }
    ]
}

我创建并注册了 2 个部分,一个模板“选择”表单元素,一个模板“单选”输入。我不知道数据中将包含哪种类型的表单元素,因此我需要某种帮助程序来检查 type == select 是否适用于选择并应用适当的部分。我在创建这样的助手时遇到了麻烦。

我正在考虑将数据中的 type=select 替换为 select=true 并使用 if/else 助手检查 true/false,但我宁愿保持格式标准化

有什么想法吗?

最佳答案

我最终使用了这个助手

// Comparison Helper for handlebars.js
// Pass in two values that you want and specify what the operator should be
// e.g. {{#compare val1 val2 operator="=="}}{{/compare}}

Handlebars.registerHelper('compare', function(lvalue, rvalue, options) {

    if (arguments.length < 3)
        throw new Error("Handlerbars Helper 'compare' needs 2 parameters");

    operator = options.hash.operator || "==";

    var operators = {
        '==':       function(l,r) { return l == r; },
        '===':      function(l,r) { return l === r; },
        '!=':       function(l,r) { return l != r; },
        '<':        function(l,r) { return l < r; },
        '>':        function(l,r) { return l > r; },
        '<=':       function(l,r) { return l <= r; },
        '>=':       function(l,r) { return l >= r; },
        'typeof':   function(l,r) { return typeof l == r; }
    }

    if (!operators[operator])
        throw new Error("Handlerbars Helper 'compare' doesn't know the operator "+operator);

    var result = operators[operator](lvalue,rvalue);

    if( result ) {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
  });

来源:http://doginthehat.com.au/2012/02/comparison-block-helper-for-handlebars-templates/

关于javascript - Handlebars 中的条件部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484977/

相关文章:

javascript - 有没有办法防止位于 <head> 中的第三方 JS 代码在不可用的情况下关闭网站?

javascript - VisualStudio javascript 混淆器窗口

c++ - 是否可以重载模板类?

javascript - Ember 数据异步关系的聚合

javascript - 动态启用按钮

javascript - 错误 : Unknown provider: translateFilterProvider <- translateFilter angularjs

c++ - 模板实例化解析错误

css - 使用 Node.js 提供用户特定的 CSS 自定义

ember.js - Ember 应用程序套件 : Router#updatePaths throws TypeError

javascript - 使用 GitHub Api 和 Ember 检索最新的 Commit 链接和消息