自定义车把.js助手不返回选项.fn

Custom Handlebars.js helper not returning options.fn

本文关键字:返回 选项 fn js 自定义      更新时间:2023-09-26

我正在尝试在车把中做出if x in JSON声明。它有效,只是它不返回正确的选项。这是索引.html:

   {{#dinsdag}}
            {{#each uitval2}}
                {{@key}}
            {{/each}}
            {{#isIn 7 uitval2}}
                <p>klopt</p>
            {{else}}
                <p>mwah</p>
            {{/isIn}}
   {{/dinsdag}}

这是数据.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);
})

最后这是助手.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);

}(;

它确实在控制台中返回True,但它在呈现的 HTML 中返回else选项。

您将在 each() 函数中返回,但这不会使您的帮助程序返回 false。

但是,您可以使用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/(:

我们可以在特定迭代中打破 $.each(( 循环,方法是使 回调函数返回假。返回非假与 在 for 循环中继续语句;它将立即跳到下一个 迭 代。