我认为在可编辑模板中使用响应式网格组件(布局组件)时,某些东西损坏了。如果您仅在根元素(也就是响应网格)中使用响应网格,那么一切似乎都可以正常工作。但是,如果您创建一个以普通parsys为根的可编辑模板,事情就会变糟。如果您打开基于该模板的任何页面,您将看到响应网格显示为允许的组件列表,而不是放置区域。
有意义的是,当com.day.cq.wcm.foundation.AllowedComponentList
的isApplicable方法返回true时,将响应网格组件(/libs/wcm/foundation/components/responsegrid/sensitivegrid.html)设置为呈现允许的组件列表。允许在创作可编辑模板时将其呈现为允许的组件列表。
我进行了一些挖掘,并在网络上找到了该组件的来源。
public boolean isApplicable () {
Page page = this.getCurrentPage();
// Is this resource parent an authored template structure resource
// And is it set as editable
if (page != null) {
Template template = page.getTemplate();
if (template != null && template.hasStructureSupport()) {
ValueMap valueMap = getResource().getValueMap();
if (valueMap != null &&valueMap.containsKey(TemplatedResource.PN_EDITABLE)) {
return valueMap.get(TemplatedResource.PN_EDITABLE, Boolean.class);
}
}
}
return false;
}
因此,它检查这是否是基于可编辑模板的页面,这似乎合乎逻辑。我猜测下一段代码将检查可编辑模板中的资源是否具有editable={Boolean}true
配置,这很有意义,因为这意味着该组件可以由作者编辑。
因此,当响应网格在页面所基于的模板中被解锁(=可编辑)时,我们将始终将响应网格呈现为页面中的允许列表组件吗?那没有道理吧?
更奇怪的是,我认为当您在响应网格中有一个响应网格时,似乎getResource().getValueMap()
击中了响应网格的上方,而不是可编辑的网格,导致此检查返回false因此我们可以实际使用响应式网格。这是偶然还是我误会了?
我们正在使用AEM 6.3.2.2。还有其他人面对这个问题吗?
getResource()
函数是否有问题?我们是否需要像com.day.cq.wcm.foundation.ResponsiveGrid
中一样将资源转换为TemplatedResource?