自定义 Handlebars.js 助手未返回 options.fn
Custom Handlebars.js helper not returning options.fn
我正在尝试在 Handlebars 中做一个 if x in JSON
声明。它有效,除了它不是 return 正确的选项。
这是 index.html:
{{#dinsdag}}
{{#each uitval2}}
{{@key}}
{{/each}}
{{#isIn 7 uitval2}}
<p>klopt</p>
{{else}}
<p>mwah</p>
{{/isIn}}
{{/dinsdag}}
这是data.js:
$(function(){
var templateScript = $("#entry-template").html();
var theTemplate = Handlebars.compile(templateScript);
var context = { "dinsdag": {
"uitval2": {
"7": "1",
"9": "1",
"11": "1"
},}}
var html = theTemplate(context);
$('.test').html(html);
$(document.body).append(html);
})
最后这是 helper.js,问题应该出在这里。
Handlebars.registerHelper('isIn', function(waarde, inWaarde, options){
$.each($.parseJSON(JSON.stringify(inWaarde)), function(k, v) {
if (parseInt(k) === parseInt(waarde)){
console.log("true");
return options.fn(this);
}
});
console.log("false");
return options.inverse(this);
});
它在控制台中 return True
,但它 return 是呈现的 HTML 中的 else
选项。
您 return 在 each()
函数中,但这并不会使您的助手 return 为假。
但是您可以使用 each()
之外的标志来确定输出。像这样:
Handlebars.registerHelper('isIn', function(waarde, inWaarde, options){
// Start with false assumption
var isTrue = false;
$.each($.parseJSON(JSON.stringify(inWaarde)), function(k, v) {
if (parseInt(k) === parseInt(waarde)){
// Set outer flag
isTrue = true;
// Break loop
return false;
}
});
if (isTrue) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
来自文档的更多信息 (http://api.jquery.com/jquery.each/):
We can break the $.each() loop at a particular iteration by making the
callback function return false. Returning non-false is the same as a
continue statement in a for loop; it will skip immediately to the next
iteration.
我正在尝试在 Handlebars 中做一个 if x in JSON
声明。它有效,除了它不是 return 正确的选项。
这是 index.html:
{{#dinsdag}}
{{#each uitval2}}
{{@key}}
{{/each}}
{{#isIn 7 uitval2}}
<p>klopt</p>
{{else}}
<p>mwah</p>
{{/isIn}}
{{/dinsdag}}
这是data.js:
$(function(){
var templateScript = $("#entry-template").html();
var theTemplate = Handlebars.compile(templateScript);
var context = { "dinsdag": {
"uitval2": {
"7": "1",
"9": "1",
"11": "1"
},}}
var html = theTemplate(context);
$('.test').html(html);
$(document.body).append(html);
})
最后这是 helper.js,问题应该出在这里。
Handlebars.registerHelper('isIn', function(waarde, inWaarde, options){
$.each($.parseJSON(JSON.stringify(inWaarde)), function(k, v) {
if (parseInt(k) === parseInt(waarde)){
console.log("true");
return options.fn(this);
}
});
console.log("false");
return options.inverse(this);
});
它在控制台中 return True
,但它 return 是呈现的 HTML 中的 else
选项。
您 return 在 each()
函数中,但这并不会使您的助手 return 为假。
但是您可以使用 each()
之外的标志来确定输出。像这样:
Handlebars.registerHelper('isIn', function(waarde, inWaarde, options){
// Start with false assumption
var isTrue = false;
$.each($.parseJSON(JSON.stringify(inWaarde)), function(k, v) {
if (parseInt(k) === parseInt(waarde)){
// Set outer flag
isTrue = true;
// Break loop
return false;
}
});
if (isTrue) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
来自文档的更多信息 (http://api.jquery.com/jquery.each/):
We can break the $.each() loop at a particular iteration by making the callback function return false. Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.