无法在 Handlbars 模板中使用 if
条件。
下面是我的 jquery Handlebars 函数,
$.each(data.response, function (i, item) {
var source = $("#my-orders").html();
var template = Handlebars.compile(source);
html += template(item);
//alert(html);
});
if(html){
$("#myorderss").html(html);
}
当我使用 if
条件时,它不起作用。
{{#if id=='1'}}
{{/if}}
如何在 Handlebars 模板中使用if
条件?
最佳答案
这是对if条件的误解。 请查看此处的 #if 文档:http://handlebarsjs.com/builtin_helpers.html
You can use the if helper to conditionally render a block. If its argument returns false, undefined, null, "", 0, or [], Handlebars will not render the block.
您需要做的是一个 Handlebars 助手来测试您的状况。
这是我用来进行比较的“测试”助手的一个示例:
Handlebars.registerHelper('test', function(lvalue, operator, rvalue, options) {
var doDisplay = false;
var items = (""+rvalue).split("|");
var arrayLength = items.length;
for (var i = 0; (i < arrayLength); i++) {
if (operator == "eq") {
if (lvalue == items[i]) {
doDisplay = true;
}
} else if (operator == "ne") {
if (lvalue != items[i]) {
doDisplay = true;
}
} else if (operator == "gt") {
if (parseFloat(lvalue) > parseFloat(items[i])) {
doDisplay = true;
}
} else if (operator == "lt") {
if (parseFloat(lvalue) < parseFloat(items[i])) {
doDisplay = true;
}
}else if (operator == "le") {
if (parseFloat(lvalue) <= parseFloat(items[i])) {
doDisplay = true;
}
}else if (operator == "ge") {
if (parseFloat(lvalue) >= parseFloat(items[i])) {
doDisplay = true;
}
}
}
if (doDisplay) {
return options.fn(this);
} else {
return "";
}
});
这里是你如何调用它,例如,如果你要测试并根据测试显示结果:
{{#test id 'eq' '1'}}
{{id}} equals 1
{{/test}}
{{#test id 'ne' '1'}}
{{id}} do not equals 1
{{/test}}
{{#test id 'ge' '1'}}
{{id}} greater or equals 1
{{/test}}
{{#test id 'ne' '1'}}
{{id}} lower or equals 1
{{/test}}
关于javascript - Handlebars (如果情况不工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542688/