2016-02-10 4 views
1

Там в этот код:Handlebars.js Не удается прочитать свойство 'хэш' неопределенной

<div id="banner-tree" class="hidden"></div> 
    <script id="banner-template" type="x-handlebars-template">     
     {{#each this}} 
      {{#if this.text and this.outcomes}} 
       <div class="banner-wrap" style="background-image: url({{imageSrc}});"> 
        <div class="banner-desc">{{text}}</div> 
        <div class="banner-markets">Odds: {{outcomes.outcomeOdds}}</div> 
       </div> 
      {{else if this.outcomes}} 
       <div class="banner-wrap" style="background-image: url({{imageSrc}});"> 
        <div class="banner-markets">Odds: {{outcomes.outcomeOdds}}</div> 
       </div> 
      {{else if this.text}} 
       <div class="banner-wrap" style="background-image: url({{imageSrc}});"> 
        <div class="banner-desc">{{text}}</div> 
       </div>      
      {{else}}  
       <div class="banner-wrap" style="background-image: url({{imageSrc}});"></div> 
      {{/if}} 
     {{/each}}   
    </script> 

И этот сценарий:

var templateBanner = $("#banner-template").html(); 
       var templateCompiled = Handlebars.compile(templateBanner); 
       var compiledHtml = templateCompiled(response.data); 
       var bannerTree = $('#banner-tree'); 
       bannerTree.html(compiledHtml); 
       bannerTree.removeClass('hidden'); 

       Handlebars.registerHelper('if', function(conditional, options) { 
        if(conditional) { 
         return options.fn(this); 
        } else { 
         return options.reverse(this); 
        } 
       }); 
       Handlebars.registerHelper('each', function(context, options) { 
        var ret = ""; 
        for(var i=0, j=context.length; i<j; i++) { 
         ret = ret + options.fn(context[i]); 
        } 
        return ret; 
       }); 

Вчера это было все в порядке. Он работал так, как должен. Сегодня утром я начал получать Cannot read property 'hash' of undefined. После некоторого запроса я понял, что ошибка находится в {{#each this}} элемента. Или, по крайней мере, я думаю. Когда я изменяю контекст, скажем, для data, он не дает никаких результатов (загруженные массивы JSON НЕ вставляются в div), но это тоже не дает мне ошибки. Когда я удаляю всю эту теорию и оставляю только

{{#each this}} 
    <div class="banner-wrap" style="background-image: url({{imageSrc}});"></div> 
{{/each}} 

Тогда это работает частично. Но, к сожалению, мне нужны эти ifs. Итак, это же, если или каждый. Я пытаюсь решить это в течение последних двух часов, и я подошел пустой:/

ответ

2

{{#if this.text and this.outcomes}} был виноват. После переопределения всего заявления просто для включения частичного if s и else он начал работать нормально.

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