2016-02-15 3 views
0

Я пытаюсь сделать заявление if x in JSON в Handlebars. Он работает, за исключением того, что он не возвращает правильный вариант. Это index.html:Пользовательский Handlebars.js помощник, не возвращающий options.fn

{{#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 в консоли, но возвращает else вариант в визуализированном HTML.

ответ

1

Вы возвращаетесь внутри функции 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() цикл в определенной итерации, сделав функцию обратного вызова возвращают ложь. Возврат не-false - это то же самое, что и инструкция continue в цикле for; он немедленно перейдет к следующей итерации .

+0

Спасибо, я привык к python, где это не проблема. Я еще не могу дать щедрость, ты получишь это завтра! –

+0

Я в порядке, спасибо! – martinczerwi

Смежные вопросы