我想用 data-sly-resource
包含资源,但前提是它存在,例如
<div class="pull-right" data-sly-resource="/content/blog/stats"></div>
如果资源不存在,脚本执行失败并显示以下错误消息:找不到 servlet 来处理资源/content/blog/stats 。从请求进度列表中我可以看到它是一个
SyntheticResource
:TIMER_START{resolveServlet(SyntheticResource, type=null, path=/content/blog/stats)}
仅当资源存在时,如何有条件地包含资源?
最佳答案
在这种情况下,最好的解决方案是允许您的 redis/stats
组件正确处理 Resource
时的情况它应该渲染的是 SyntheticResource
或者,更一般地说,不提供任何属性。
因此,调用 Sightly 代码段应该是:
<div class="pull-right" data-sly-resource="${'/content/blog/stats' @ resourceType='redis/stats'}"></div>
这会强制由您的
redis/stats
进行渲染。组件,即使 /content/blog/stats
资源不存在(好吧,Sling 将返回 SyntheticResource
,就像您提到的那样)。在您的
redis/stats
组件,然后您可以尝试此保护措施:<div class="blog-stats" data-sly-test="${properties}">
<!--/* This whole block will only be rendered if properties is not empty */-->
</div>
这将呈现
div.blog-stats
仅当属性映射不为空 [0] 时。[0] - https://github.com/Adobe-Marketing-Cloud/sightly-spec/blob/1.1/SPECIFICATION.md#225-test
关于sling - 如何仅在 Sightly 模板中包含存在的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485920/