extjs - 是否可以在不使用自定义小部件的情况下将单个对话框字段映射到多个 JCR 属性?

标签 extjs aem sling

我的 AEM 项目中有一段配置需要简化。

配置可以由两组用户更改。一个需要对一组参数进行精细控制,而另一个只关心单个参数。

我没有编写自定义 Ext JS 插件来隐藏/显示字段并添加一个额外的字段来在正常/简化模式之间切换,而是决定为那些对粒度配置不太感兴趣的人制作一个单独的组件。

在我的 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 小部件来单独发布它们?我可以写一个,但如果可能的话,我想避免它。

    最佳答案

    是的,这是可能的。 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" />
    

    出于某种原因,这只适用于 valuedefaultValue设置。仅设置 defaultValue使这项工作适用于新创建的组件,但每次打开对话框时,它都会从存储库中读取数据并清除预期值。同时,设置只是value属性将阻止对话框在第一次打开对话框时初始化元素。

    关于extjs - 是否可以在不使用自定义小部件的情况下将单个对话框字段映射到多个 JCR 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38726015/

    相关文章:

    php - 如何设计用于跟踪具有设置最大项目的订单的数据库

    aem - AEM 6 对话框中字段的条件显示/隐藏

    aem - 吊带模型 : Can I inject the SlingHttpServletRequest when adapting from Resource?

    java - cq5无法创建servlet资源

    java - Equinox 中的 Sling 日志记录配置

    javascript - 让子元素监听 extJS 事件

    extjs - 如何在 extjs 中对标题网格进行分组?

    ExtJS - TreeGrid 上的自定义列渲染器没有被触发

    java - 如何为 Sling Resource 实现自定义 AdapterFactory?

    jsp - CQ从当前节点(当前组件)访问深层子节点的属性