2016-02-15 133 views
0

我試圖在Handlebars中創建if x in JSON語句。它的工作原理,但它不會返回正確的選項。 這是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,但它返回的HTML渲染的else選項。

回答

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/)一些更多的信息:

我們可以通過使 回調函數返回false打破在一個特定的迭代。每個$()循環。返回非錯誤與for循環中的 continue語句相同;它會立即跳到下一個 迭代。

+0

謝謝,我習慣了蟒蛇,這不是一個問題。我不能給予賞金,明天你會明白的! –

+0

我很好,謝謝! – martinczerwi