如何更改 属性 的持久性 cq:inplaceEditing

How to change persistence property of cq:inplaceEditing

我希望在 AEM 作者使用我的 JCR 时使用 cq:inplaceEditing 修改 属性。不幸的是,我不知道如何修改它在JCR中实际修改的属性name。默认情况下,它似乎只修改 属性 "text" 的值。

出于我的目的,我想将其富文本编辑功能用于具有我定义的名称的属性,而不仅仅是默认名称 "text."

link 处的图像显示了包含 cq:inplaceEditing(由 CRXDE 提供)的树:

这些是cq:editConfig的属性:

这些是cq:inplaceEditing的属性:

...这就是我使用 inplaceEditor 时 JCR 的内容节点的样子。出于潜在的安全原因,我已经涂掉了一些属性的名称。请注意,下面的 "text" 属性 在我使用 inplaceEditor 时已更改。另请注意,我希望能够定义 inplaceEditor 更改的 属性 名称,而不仅仅是 "text" 属性:

有没有办法使用不同的 属性 名称来代替 "text"?

------------编辑----------

将 属性 "textPropertyName" 更改为我正在搜索的 属性 后,它似乎仍然没有真正修改 inplaceEditor 的行为。它仍然只修改我的 JCR 节点的 "text" 属性 而不是我放在 "textPropertyName" 属性中的节点。

这张图片包含我的属性 cq:InplaceEditingConfig:

下图包含了上图中"configPath"变量指定路径下JCR节点的属性。请注意,我在此节点中设置了 textPropertyName 属性,文本组件仍然修改默认属性 "text" 而不是指定的属性:

最后,下图显示了我在文本组件中的 JCR 树的内容。

------------另一个编辑---------

我发现在我切换到经典 UI 后,内联文本编辑器仍然保持正确的 属性。出于某种原因,触摸 UI.

无法正常工作

如何找到它

就地编辑功能由 CQ.ipe.InplaceEditing 函数的子类定义。只需通过 CRXDE 工具搜索 editorType 即可轻松找到它。

正在搜索 CQ.ipe.InplaceEditing returns 多个结果,例如 CQ.ipe.TextEditor 在脚本的最后注册所需的 editorType 即:CQ.ipe.InplaceEditing.register("text", CQ.ipe.TextEditor);

答案

通读编辑器代码,您可以找到第一个名为 textPropertyName 的可配置 属性,根据它的文档,这正是您要找的东西。将它与就地配置节点(参见 Adobe's documentation)相结合,它就是适合您的情况的解决方案。

一个例子

您可以在Geometrixx组件实例上自行尝试。

  1. 先去CRXDE找到Geometrixx Text组件:/apps/geometrixx-gov/components/text.
  2. 通知/apps/geometrixx-gov/components/text/cq:editConfig/cq:inplaceEditing@configPath属性值。
  3. 找到 /apps/geometrixx-gov/components/text/dialog/items/tab1/items/text 资源并添加新的 属性: textPropertyName=myPropertyName.
  4. 然后只需打开 Geometrixx Gov page 添加 Geometrixx 文本组件,就地编辑它并查看网络控制台。您会注意到 POST 请求更改了参数名称

在 TouchUI 说明后编辑

TouchUI案例

不幸的是,如果您想为 TouchUI 界面实现相同的效果,那可不是那么容易。 TouchUI 的 text 就地编辑器由 /libs/cq/gui/components/authoring/clientlibs/editor/js/editors/InlineTextEditor.js.

定义

搜索 "text" 可让您大致了解此 属性 的硬编码程度。对于 AEM 6.1(我正在对其进行测试),您可以在 ns.persistence.readParagraphContent 函数中找到它,其中 initialContent 是从资源 JSON 映射中提取的。在 finishInlineEditaddHistoryStep 方法中可以找到另一个事件。将 "text" 的所有三个出现更改为您的值会带来预期的结果。

这显然是不可接受的 - 这是一个平台范围内的更改,并且会影响其他(包括 ootb)组件,而这可能是意料之外的。最简单的方法是将整个编辑器复制粘贴到您的 clientlib 中,然后将编辑器注册为一个新名称 - 请参阅最后几行:ns.editor.register。如果您对 JS 感到满意,可能值得扩展此编辑器并仅更改受影响的三个方法。

从 AEM 6.3 开始,textPropertyName 可以与开箱即用的 PlainTextEditor.js

一起正常工作

需要在cq:InplaceEditingConfig

下的config节点上设置属性


注意 – 现在可以在以下位置找到编辑器的源代码: /libs/cq/gui/components/authoring/editors/clientlibs/core/inlineediting/js/PlainTextEditor.js