Можно ли передать значение выражения handlebar в подвыражение? - PullRequest
0 голосов
/ 13 июня 2018

Если у моего родительского контекста есть доступ к свойству (индексу), могу ли я передать его в подвыражение?Я не могу заставить его работать.Я подтвердил, что с блоком работает статическое значение, переданное ему (1)

// Parent template
-----------------------------------------------------------------------------
{#child {{../report.ResourceName}}--{{Name}} @data.parentIndex={{@index}} }


// Child template
-----------------------------------------------------------------------------
{{parentIndex}} // displays correctly as 2

// does not render
{{#with (lookup report.sections parentIndex)}}
    Rendered: {{name}}
{{/with}}

// renders correctly
{{#with (lookup report.sections 2)}}
    Rendered: {{name}}
{{/with}}

1 Ответ

0 голосов
/ 13 июня 2018

когда вы используете динамические данные в вызове дочернего шаблона (например, индекс в каждой итерации), вы должны быть осторожны, потому что все может работать не так, как вы ожидаете.

, например, при использовании чего-то подобного

{{#each report.sections}} 
    {#child child @data.parentIndex={{@index}} }
    <br /> 
{{/each}}

то, что передается фактически дочернему шаблону, это "parentIndex": "0 ", это может быть неочевидно, но при передаче данных с использованием синтаксиса @data.parentIndex все пробелы имеют значение, и поскольку вы используете {#child child @data.parentIndex={{@index}} }, который содержитпробел (}) в конце, затем конечное значение содержит этот пробел.

правильный способ передать это должен быть {#child child @data.parentIndex={{@index}}}, но это выдает ошибку руля, потому что она запутывается скобкамисинтаксис дочернего вызова.

работает следующим образом:

родительский шаблон:

{{#each report.sections}} 
    {{{callChild @index}}}
    <br /> 
{{/each}}

помощники родительского шаблона:

function callChild(parentIndex) {
    return '{#child child @data.parentIndex=' + parentIndex + '}'
}

дочерний шаблон:

{{parentIndex}}

{{#with (lookup report.sections parentIndex)}}
    Rendered: {{name}}
{{/with}}

причина, по которой это работает, состоит в том, что мы избегаем путаницы рулей с помощью синтаксиса скобок, мы делаем это путем динамического конструирования дочернего вызова с помощью помощника, который в конце концов разрешается после обработки шаблона рулями.

наконец-то здесь - это живой пример этого случая

надеюсь, это поможет вам.

...