仅当属性存在时才在Sightly/HTL中添加属性(AEM)

仅当属性存在时才在Sightly/HTL中添加属性(AEM),aem,sightly,Aem,Sightly,我有一个组件,它从对话框中获取图像的路径并渲染它。 下面是该组件的片段- <div class="${something}" style="background-image:url('${properties.backgroundImageReference @ context='styleString'}');"> </div> 这很好,但我想添加一个逻辑来生成style属性,仅当properties.backgroundI

我有一个组件,它从对话框中获取图像的路径并渲染它。 下面是该组件的片段-

<div class="${something}" style="background-image:url('${properties.backgroundImageReference @ context='styleString'}');">
</div>

这很好,但我想添加一个逻辑来生成
style
属性,仅当
properties.backgroundImageReference
存在时

有没有快速的方法?请注意,我不想使用封闭的
数据测试
条件


谢谢

您可以在Use对象中生成整个样式字符串,当未设置属性时,该字符串可能返回null/empty,然后将跳过该属性

请参见示例

另一个选项是使用
数据集
定义整个背景样式,并利用三元运算符:

<div class="${something}" 
   data-sly-set.backgroundStyle="background-image:url('${properties.backgroundImageReference @ context='styleString'}');"
   style="${properties.backgroundImageReference ? backgroundStyle : ''}">
</div>

如果未设置属性,则可以在Use对象中生成整个样式字符串,该字符串可能返回null/empty,然后将跳过该属性

请参见示例

另一个选项是使用
数据集
定义整个背景样式,并利用三元运算符:

<div class="${something}" 
   data-sly-set.backgroundStyle="background-image:url('${properties.backgroundImageReference @ context='styleString'}');"
   style="${properties.backgroundImageReference ? backgroundStyle : ''}">
</div>

这里是实现这一目标的三个选项

吊索模型 使用sling模型是首选的方法,因为它提供了更好的关注点分离,保持HTL干净,并且您可以为您的模型编写测试

package com.yourproject.models;
@模型(Adaptebles=Resource.class,
defaultInjectionStrategy=defaultInjectionStrategy.OPTIONAL)
公众阶级形象{
@ValueMapValue
私有字符串backgroundImageReference;
私有字符串背景样式;
@施工后
公共void init(){
if(backgroundImageReference!=null){
backgroundStyle=String.format(“背景图像:url('%s')”,backgroundImageReference);
}
}
公共字符串getBackgroundStyle(){
回归背景风格;
}
}

仅限HTL 您可以选择HTL唯一的方法,以防您觉得吊索模型的杀伤力过大。缺点是您的HTL将变得复杂,很快就难以维护


使用.js 在我看来,Use.js是最不推荐的方式。您无法调试代码,无法编写测试,使用非常旧的JS引擎将JS编译成Java,并且存在一些非常严重的错误,例如布尔比较

//image.use.js
"严格使用",;
使用([],函数(){
var backgroundImageReference=properties.get('backgroundImageReference','';
var backgroundStyle=backgroundImageReference!=''
?“背景图像:url(“+backgroundImageReference+”)”
: '';
返回{
背景风格:背景风格
};
});

这里是实现这一目标的三个选项

吊索模型 使用sling模型是首选的方法,因为它提供了更好的关注点分离,保持HTL干净,并且您可以为您的模型编写测试

package com.yourproject.models;
@模型(Adaptebles=Resource.class,
defaultInjectionStrategy=defaultInjectionStrategy.OPTIONAL)
公众阶级形象{
@ValueMapValue
私有字符串backgroundImageReference;
私有字符串背景样式;
@施工后
公共void init(){
if(backgroundImageReference!=null){
backgroundStyle=String.format(“背景图像:url('%s')”,backgroundImageReference);
}
}
公共字符串getBackgroundStyle(){
回归背景风格;
}
}

仅限HTL 您可以选择HTL唯一的方法,以防您觉得吊索模型的杀伤力过大。缺点是您的HTL将变得复杂,很快就难以维护


使用.js 在我看来,Use.js是最不推荐的方式。您无法调试代码,无法编写测试,使用非常旧的JS引擎将JS编译成Java,并且存在一些非常严重的错误,例如布尔比较

//image.use.js
"严格使用",;
使用([],函数(){
var backgroundImageReference=properties.get('backgroundImageReference','';
var backgroundStyle=backgroundImageReference!=''
?“背景图像:url(“+backgroundImageReference+”)”
: '';
返回{
背景风格:背景风格
};
});


是的,这是一种方法。我只是想知道在HTL中是否有一种快速的方法可以做到这一点。@ArchitArora添加了另一个选项。是的,这是一种方法。“我只是想知道在HTL中是否有一种快速的方法可以做到这一点。”ArchitArora添加了另一个选项。