您正在查看吊索分辨率的工作原理。
我反对Adobe aem-developer指南
中提到的这种情况https://docs.adobe.com/docs/en/aem/6-2/develop/the-basics.html
这是提及的情况─ / a(没有任何资源超类型或资源类型)
b(sling:resourceSuperType = a)
c(sling:resourceSuperType = b)
x(sling:resourceType = c)
y(sling:resourceType = c,sling:resourceSuperType = a)
/ x的类型层次结构是[c,b,a,],而对于/ y,层次结构是[c,a,],因为/ y具有sling:resourceSuperType属性而/ x不具有,因此其超类型是取自其资源类型。
现在我了解/ x是如何解决的。但我不确定/ y。首先它解决了/ c。它本身有一个吊索:resourceSuperType为b。吊带分辨率是否也应该转到/ b。如何覆盖超类型并将资源解析为a而不是b。
答案 0 :(得分:4)
如Apache Sling documentation中所述,如果为特定资源定义了sling:resourceSuperType
,则会使用它。如果它不存在,框架将使用由sling:resourceSuperType
指向的资源定义的sling:resourceType
。
也就是说,如果是/y
,/b
将不会被视为超级类型。 sling:resourceSuperType
定义的/y
本身直接指向/a
。它会有效地隐藏sling:resourceSuperType
定义的/c
属性(并指向/b
),否则会被考虑在内。
在您链接的documentation page上已经很好地描述了这个例子。
根据我的经验,如果资源类型层次结构由定义组件的一组节点定义并作为/apps
或/libs
的后代存在于存储库中,则大多数自定义AEM组件更易于维护(在继承层次结构中包含OOTB组件时)。然后,/content
子树中存在的组件的特定实例(包括负责呈现整个页面的组件)可以明确地定义确定其类型(继承与否)的sling:resourceType
。就个人而言,我不希望在sling:superResourceType
子树的资源级别定义/content
,因为它使层次结构更难以推理。在我的头脑中,我想不出一个可以证明这种权衡的用例。如果他们认识一个好人,也许其他人可以权衡。