на handlebars.js, как вы используете #first на родительском уровне? - PullRequest
0 голосов
/ 03 октября 2018

Используя handlebars.js, я могу отобразить 1-й элемент массива на том же уровне, как показано здесь:

{{#each array01}}
    {{#if @first}}{{objectAttribute01}}{{/if}}
{{/each}}

, но если у меня есть вложенный массив, как показано ниже, как мне это сделать?проверить для 1-го элемента array03 вместо array01?

{{#each array03}}
    {{#each array02}}
         {{#each array01}}
             {{#if @first}}{{objectAttribute01}}{{/if}}
         {{/each}}   
    {{/each}}   
{{/each}}  

Не работает следующее:

@../../first 

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

FWIW

То, что вы попробовали, должно было сработать.

{{#if @../../first}}

См. Фрагмент:

var data = {
  array03: [{
    array02: [{
      array01: [{
        objectAttribute01: 'foo'
      }]
    }]
  }, {
    array02: [{
      array01: [{
        objectAttribute01: 'bar'
      }]
    }]
  }]
};

var source = $('#entry-template').html();
var template = Handlebars.compile(source)(data);

$('body').html(template)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.12/handlebars.min.js"></script>

<script id="entry-template" type="text/x-handlebars-template">
{{#each array03}}
    {{#each array02}}
         {{#each array01}}
             {{#if @../../first}}{{objectAttribute01}}{{/if}}
         {{/each}}   
    {{/each}}   
{{/each}} 
</script>
0 голосов
/ 12 октября 2018

Handlebars поддерживает сегмент пути ../.Этот сегмент ссылается на родительскую область шаблона.Использование ../ необходимо только при изменении контекста

В соответствии с вашим кодом,

{{#each array03}}
     {{#each array02}}
         {{#each array01}}
             {{#if @first}}{{objectAttribute01}}{{/if}}
        {{/each}}   
    {{/each}}   
{{/each}} 

измените его на:

{{#each array03}}
     {{#each array02}}
          {{#each array01}}
              {{#if @../../first}}{{objectAttribute01}}{{/if}}
        {{/each}}   
     {{/each}}   
{{/each}}

Выможет получить доступ к первому элементу array03 и array02 подобно @../../first и @../first соответственно.

0 голосов
/ 03 октября 2018

Я решил мою проблему с помощью пользовательской функции, которая собирает родительский индекс:

javascript:

var indexLevel01 = 0;
var indexLevel02 = 0;

function setIndexLevel01(indexEntry)
    {indexLevel01 = indexEntry;}

function setIndexLevel02(indexEntry)
    {indexLevel02 = indexEntry;}

function onlyShowFirstOfLevel01(attributeEntry)
    {//start onlyShowFirstOfLevel01
        if(indexLevel01 === 0 && indexLevel02 === 0)
            {return attributeEntry}
        else{return ""}
    }//end onlyShowFirstOfLevel01

html:

{{#each array03}}
    {{#each array02}}{{setIndexLevel01 @index}}
         {{#each array01}}{{setIndexLevel02 @index}}
             {{onlyShowFirstOfLevel01 objectAttribute01}}
         {{/each}}   
    {{/each}}   
{{/each}}
...