Adobe 如何根据CQ5实例中的不同网站操作sidekick中允许的组件组?

Adobe 如何根据CQ5实例中的不同网站操作sidekick中允许的组件组?,adobe,aem,Adobe,Aem,我试过上面的内容,但由于文章的不完整,我失败了。加载页面时会发生什么情况?哪个js调用哪个js?如何覆盖ComponentList.js的“update”函数?如何调用它?我尝试使用侦听器,但失败了(可能是因为第一次使用侦听器?) 每个客户端组件还获得一个单元搜索路径,并最终分配一个CQ.wcm.cell>。 允许的组件数组保存在CQ.wcm.ComponentList类中,该类的每个页面都有一个实例 insert对话框和sidekick从该对象获取组件的最终列表 可以使用容器组件上的普通edi


我试过上面的内容,但由于文章的不完整,我失败了。加载页面时会发生什么情况?
哪个js调用哪个js?
如何覆盖ComponentList.js的“update”函数?
如何调用它?
我尝试使用侦听器,但失败了(可能是因为第一次使用侦听器?)

每个客户端组件还获得一个单元搜索路径,并最终分配一个CQ.wcm.cell>。 允许的组件数组保存在CQ.wcm.ComponentList类中,该类的每个页面都有一个实例

insert对话框和sidekick从该对象获取组件的最终列表

可以使用容器组件上的普通editConfig侦听器注册“updatecomponentlist”侦听器

根据文档,sidekick从设计路径读取组件列表,要在客户端修改组件列表,必须在容器组件的编辑配置中添加
updatecomponentlist
事件侦听器

我不能告诉你内部的情况,但我可以告诉你如何操作SideKick中的组件列表

  • 您必须扩展此答案,为此,请将其命名为myparsys

  • 在myparsys的cq:editConfig节点内添加一个cq:listeners节点

  • 在节点cq:listeners中添加一个属性updatecomponentlistener,其值应为此处提供的函数

    function MyHandler(cell, allowed, componentList) {
      // manipulate the 'allowed' array if needed
      if(allowed instanceof Array)
          allowed.push('your component group');
    }
    
  • 在页面中使用myparsys组件

  • 这里唯一的问题是,如果
    allowed
    参数是字符串,则它不起作用。当在该页面的设计路径中允许单个组件或单个组时,就会发生这种情况。因此,要使其始终有效,请在设计路径中保持允许的组件列表为空,并在运行时更改允许的组件

    此外,根据文件,这是不正确的支持

    请注意,当前不支持对组件列表进行“运行时”操作。>i、 e.如果允许的组件列表取决于客户端更改,则不能>传播到对话框

    这意味着在设计对话框中,您在运行时允许的组件将不会显示给作者


    因此,我建议您咨询适当的CQ开发人员,或在官方CQ论坛或Adobe论坛上询问是否推荐使用此用例。

    只是想知道您是否真的需要在加载不同页面时动态选择组件组。如果您想知道是否可以手动执行此操作,请从sidekick切换到设计模式,并编辑要放置组件(通常是parsys)的目标单元格。这应该会在sidekick中打开一个菜单,然后你可以在那里设置组件组。嗨bongman,我想我已经知道你说的关于设计模式的事情了。请你只回答被问到的问题。我相信这些信息的来源是:而且,这些说明对我不起作用。updatecomponentlist事件侦听器似乎已注册,但从未被激发。我打开了一张日托票据,并在社区论坛上描述了我的发现:为了跟进我之前的评论,缺少的部分是组件定义上的cq:isContainer=“true”属性。此属性(不是从扩展parsys的组件上的resourceSuperType继承的)是文档中遗漏的一条重要信息。事实上,只要设置了此属性(允许您在嵌入parsys组件的组件上定义此侦听器),该组件就不需要是parsys的副本或扩展。