是否可以在不使用自定义小部件的情况下将单个对话框字段映射到多个 JCR 属性?
Is it possible to map a single dialog field to multiple JCR properties without using custom widgets?
我想简化我的 AEM 项目中的一个配置。
两组用户可以更改配置。一个需要对一组参数进行精细控制,而另一个只关心一个参数。
我没有为 hide/show 字段编写一个自定义的 Ext JS 插件并添加一个额外的字段来在 normal/simplified 模式之间切换,我决定为那些对粒度不太感兴趣的人制作一个单独的组件配置
在我的 dialog.xml
中,在全功能组件中,我有以下字段:
<field1
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 1"
name="./field1"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field2
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 2"
name="./field2"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field3
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 3"
name="./field3"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
在简化组件的对话框中,我只需要一个字段:
- 字段
而 Field 1、Field 2 和 Field 3 的值应该被推断来自 Field 的值(在这种情况下,所有 3 个字段应具有相同的值)
我不想引入单独的 Sling 模型或任何其他 Adaptable,我希望保持内容结构一致以便于后端使用。
- myComponent
- field1
- field2
- field3
是否可以将经典 UI 对话框中的一个字段映射到内容存储库中的多个属性 而无需创建自定义 Ext JS 小部件以分别 post 它们?我可以写一个,但我想尽可能避免它。
是的,这是可能的。 SlingPostServlet 支持 a parameter called @ValueFrom
,这允许它根据不同字段的值在内容存储库中生成 属性 的内容。
这是一个(部分)对话框定义,在我的例子中映射到右侧 HTML 表单:
<field1
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 1"
name="./field1"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field2
jcr:primaryType="cq:Widget"
xtype="hidden"
name="./field2@ValueFrom"
value="./field1"
defaultValue="./field1" />
<field3
jcr:primaryType="cq:Widget"
xtype="hidden"
name="./field3@ValueFrom"
value="./field1"
defaultValue="./field1" />
出于某种原因,这仅在同时设置 value
和 defaultValue
时才有效。仅设置 defaultValue
可使此功能适用于新创建的组件,但每次下次打开对话框时,它将从存储库中读取数据并清除预期值。同时,仅设置 value
属性 将防止对话框在第一次打开时初始化元素。
我想简化我的 AEM 项目中的一个配置。
两组用户可以更改配置。一个需要对一组参数进行精细控制,而另一个只关心一个参数。
我没有为 hide/show 字段编写一个自定义的 Ext JS 插件并添加一个额外的字段来在 normal/simplified 模式之间切换,我决定为那些对粒度不太感兴趣的人制作一个单独的组件配置
在我的 dialog.xml
中,在全功能组件中,我有以下字段:
<field1
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 1"
name="./field1"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field2
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 2"
name="./field2"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field3
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 3"
name="./field3"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
在简化组件的对话框中,我只需要一个字段:
- 字段
而 Field 1、Field 2 和 Field 3 的值应该被推断来自 Field 的值(在这种情况下,所有 3 个字段应具有相同的值)
我不想引入单独的 Sling 模型或任何其他 Adaptable,我希望保持内容结构一致以便于后端使用。
- myComponent
- field1
- field2
- field3
是否可以将经典 UI 对话框中的一个字段映射到内容存储库中的多个属性 而无需创建自定义 Ext JS 小部件以分别 post 它们?我可以写一个,但我想尽可能避免它。
是的,这是可能的。 SlingPostServlet 支持 a parameter called @ValueFrom
,这允许它根据不同字段的值在内容存储库中生成 属性 的内容。
这是一个(部分)对话框定义,在我的例子中映射到右侧 HTML 表单:
<field1
jcr:primaryType="cq:Widget"
allowBlank="false"
fieldLabel="Field 1"
name="./field1"
xtype="selection"
type="select"
options="/bin/myapp/fancyOptions.json" />
<field2
jcr:primaryType="cq:Widget"
xtype="hidden"
name="./field2@ValueFrom"
value="./field1"
defaultValue="./field1" />
<field3
jcr:primaryType="cq:Widget"
xtype="hidden"
name="./field3@ValueFrom"
value="./field1"
defaultValue="./field1" />
出于某种原因,这仅在同时设置 value
和 defaultValue
时才有效。仅设置 defaultValue
可使此功能适用于新创建的组件,但每次下次打开对话框时,它将从存储库中读取数据并清除预期值。同时,仅设置 value
属性 将防止对话框在第一次打开时初始化元素。