Node.js Handlebars {{object}} не визуализируется внутри цикла {{each}}, но визуализируется вне цикла (и другие {{object_names}} визуализируются внутри цикла)

#javascript #node.js #handlebars.js

#javascript #node.js #handlebars.js

Вопрос:

Я использую Express, Node и Handlebars, и я не могу понять, почему мой {{object_one}} не будет отображаться в цикле {{each}}, но он отображает {{object_two}} изнутри и {{object_one}} снаружи.

Вот пример, поскольку я не уверен, что правильно это описываю:

 {{#each inline_upsell_amounts}}
<div class="col-4"><a href="{{base_url}}?{{#if inline_ab_refcode}}refcode={{inline_ab_refcode}}amp;{{/if}}">$ {{this}}</a></div>
{{/each}}

<p>This shows the 'base_url' value: {{base_url}}</p>
  

Таким образом, внутри цикла base_url визуализируется как пустой или «. значением base_url является строка (url ‘http://something.com‘ ).

Он корректно отображается вне каждого цикла, и {{inline_ab_refcode}} также строка отлично отображается внутри цикла.

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

Надеюсь, это что-то глупое, что вы можете видеть?!

Ответ №1:

Вы что-то упускаете: в цикле {{base_url}} это не то же самое, что вне цикла : в цикле {{base_url}} на самом деле {{inline_upsell_amounts.0.base_url}} или {{inline_upsell_amounts.1.base_url}} и так далее … вне него это {{base_url}}. Потому что аргумент цикла становится новой ссылкой.

Что вы можете сделать, это обратиться к родительскому элементу и использовать {{../base_url}} внутри цикла и {{base_url}} снаружи. Если вам нужна ссылка, которая всегда одна и та же, вы также можете использовать {{@root/base_url}} , которая всегда будет base_url корневого элемента.

Таким образом, ваш код будет выглядеть следующим образом :

 {{#each inline_upsell_amounts}}
<div class="col-4"><a href="{{../base_url}}?{{#if inline_ab_refcode}}refcode={{inline_ab_refcode}}amp;{{/if}}">$ {{this}}</a></div>
{{/each}}

<p>This shows the 'base_url' value: {{base_url}}</p>
  

Надеюсь, я выразился достаточно ясно.

Комментарии:

1. Спасибо, что это сработало! Я не видел доступ к объекту типа ../ folder в примерах handlebars каждого цикла