我有一个测试网页,其中包含一个组件,一个轮播。
该组件是从/libs/foundation/components/carousel
复制的,我从复制的组件中修改的是属性:
sling:从foundation/components/list
到foundation/components/carousel
的resourceSuperType。
我的下一步是从触摸对话框中移除属性(属性Controls Style
)。
我的问题是,在我的网页中,即使删除了该属性,我仍然会看到它。
这是因为resourceSuperType
是foundation/components/carousel
,因为这个组件仍然具有我在对话框中看到的属性吗?
此行为与AEM 5中的情况不同。
我的目的是复制组件,保留继承(resourceSuperType)并修改复制的组件。
我做错了什么?
编辑:进行一些测试我发现在AEM 6.0中,如果我删除了旋转木马的属性(我复制的旋转木马),则该属性不会出现。但是在AEM 6.1中出现了属性。哪里可以找到两个版本之间的这种变化?还是别的什么?答案 0 :(得分:1)
创建叠加层时,即使它们不存在于叠加层中,您也可以从原始组件中找到所有属性。
您必须通过向您的叠加层添加sling:hideProperties
类型的String[]
属性来明确删除该属性。这样您就可以隐藏从您尝试覆盖的/libs
节点继承的值。
我认为您会在the documentation中找到sling:hideProperties
属性的各种用例的描述非常有用。
答案 1 :(得分:1)
作为其资源解析过程的一部分,Sling Resource Resolver具有搜索路径,可以查找资源。
两种最常见的搜索路径是/apps
和/libs
。 / apps路径优先。 sling:resourceType
中最常见的用法,其中值定义为其中一个搜索路径下面的路径。在你的情况下,有一个sling:resourceType foundation/components/carousel
最初将返回/ libs下的OOTB组件,当你将它复制到/ apps目录时,它将返回你放在/ apps下的组件。
使用您自己的组件替换现有组件的概念称为叠加另一种方法称为扩展您定义sling:resourceSuperType
的组件,如果在现有路径中找不到资源,则会将请求传递给superType以查看是否可以在那里找到资源。
在6.0之前,这种叠加概念仅适用于资源。哪个是包含属性的节点(简单来说)。在大多数常见用法中,您必须将大部分组件反映到新的搜索路径中,以获得您要执行的操作。
从6.0开始,有一个合并资源的新概念。这将组合位于多个搜索路径中的资源的值。这允许您修改或更改组件的功能,而无需复制其他所有内容。您可以在特定级别更改属性。
这些都不会自动发生。要获得此功能,组件需要了解ResourceMergerApi并在尝试解析资源时使用该API。
这就是文件提到花岗岩的原因。 Granite指的是由Adobe编写的新组件,它使用TouchUI并且知道这个新的API。随着每个新版本的发布,越来越多的旧组件被支持资源合并的基于TouchUI的新组件所取代。包括旋转木马。