Переменная времени выполнения не разрешена внутри элемента стиля в Sightly в AEM 6.2

Я пытаюсь предоставить фоновое изображение для div, создавая переменную в виде.

Я читаю свойство визуально, и когда я добавляю его в тег стиля, оно не работает.

вот HTML

<sly data-sly-test.fileReference="${properties.title}" />

<div style="background: url(${fileReference}); background-position: center top;">
<p>${properties.title}</p>

Когда страница отображается, это то, что я вижу

<div style="background: url(); background-position: center top;">
<p>my Title</p></div>

Это означает, что ${properties.title} внутри <p> тег принят, но он не работает с внутренним элементом стиля.

1 ответ

Решение

Переменная разрешается просто отлично. Причина ваша url() значение пусто, потому что вы не используете правильный контекст отображения. Кроме того, значение, которое вы передаете туда, строка "my Title", не является действительным URL-адресом (что необходимо распечатать) или допустимым токеном стиля (что обычно отображается в style атрибут)

Вы заметите, что каждое из следующих выражений отображает пустой url() значение:

<div style="background: url(${'cookies'});"></div>
<div style="background: url(${'cookies with chocolate chips'});"></div>

<!--/* both print background: url();*/-->

Если мы заставим контекст отображения разрешить любую строку, значение будет напечатано

<div style="background: url(${'cookies' @ context='unsafe'});">
</div>
<!--/* prints background: url(cookies);*/-->

В script а также style контексты, HTL требует, чтобы контекст дисплея был указан явно. Если это не так, вывод не отображается.

То, что вы хотите вывести для отображения фонового изображения, - это URL-адрес изображения. Давайте попробуем сделать это явным:

<div style="background: url('${'/etc/designs/myapp/img/someimage.png' @ context='uri'}');">
</div>
<!--/* prints background: url('/etc/designs/myapp/img/someimage.png');*/-->

Там, это делает трюк!

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

Это сработало для меня --- добавив @ context='styleToken'

<sly data-sly-test.fileReference="${properties.title}" />
<div style="background: url(${fileReference @ context='styleToken'}); background-position: center top;">
<p>${properties.title}</p>
Другие вопросы по тегам