如何更改 属性 的持久性 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组件实例上自行尝试。
- 先去CRXDE找到Geometrixx Text组件:
/apps/geometrixx-gov/components/text
.
- 通知
/apps/geometrixx-gov/components/text/cq:editConfig/cq:inplaceEditing@configPath
属性值。
- 找到
/apps/geometrixx-gov/components/text/dialog/items/tab1/items/text
资源并添加新的 属性: textPropertyName=myPropertyName
.
- 然后只需打开 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 映射中提取的。在 finishInlineEdit
和 addHistoryStep
方法中可以找到另一个事件。将 "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
我希望在 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组件实例上自行尝试。
- 先去CRXDE找到Geometrixx Text组件:
/apps/geometrixx-gov/components/text
. - 通知
/apps/geometrixx-gov/components/text/cq:editConfig/cq:inplaceEditing@configPath
属性值。 - 找到
/apps/geometrixx-gov/components/text/dialog/items/tab1/items/text
资源并添加新的 属性:textPropertyName=myPropertyName
. - 然后只需打开 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 映射中提取的。在 finishInlineEdit
和 addHistoryStep
方法中可以找到另一个事件。将 "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