繁体   English   中英

自定义Handlebars.js帮助程序不返回options.fn

[英]Custom Handlebars.js helper not returning options.fn

我正在尝试在Handlebars的if x in JSON语句中创建if x in JSON 除了不返回正确的选项外,它都有效。 这是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);

});

它的确在控制台中返回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/ ):

通过使回调函数返回false,可以在特定的迭代中破坏$ .each()循环。 返回非false与for循环中的continue语句相同; 它将立即跳至下一个迭代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM