展示动态属性

当项目中安装了动态属性扩展组件,则创建新的详情视图或列表视图时,可以使用 dynamicAttributes facet。

在视图展示动态属性的另一个方法就是使用 DynamicAttributesPanel

使用 dynamicAttributes Facet

dynamicAttributes facet 支持在 DataGridFormLayout 组件中展示动态属性,这两种组件需要绑定包含动态属性实体的数据容器。

在界面 XML 中的 facets 部分添加 dynamicAttributes facet:

<view xmlns="http://jmix.io/schema/flowui/view"
      xmlns:dynattr="http://jmix.io/schema/dynattr/flowui"
      title="msg://carDetailView.title"
      focusComponent="form">
    <facets>
        <dynattr:dynamicAttributes/>
        <dataLoadCoordinator auto="true"/>
    </facets>
    <!--...-->
</view>

然后,需要在 Category attribute detail(分类属性编辑) 视图的 可见性 标签页选择此界面。

使用 DynamicAttributesPanel

如果实体实现了 Categorized 接口,则可以使用 DynamicAttributesPanel 组件来显示该实体的动态属性。此组件支持为特定实体实例选择分类,并指定此分类的动态属性的值。

如需在详情视图中使用 DynamicAttributesPanel 组件,请按照下列步骤:

  • 确保在带分类实体的 fetch plan 中,包含了 category 属性:

    <data>
        <instance id="carDc"
                  class="com.company.demo.entity.Car">
            <fetchPlan extends="_base">
                <property name="category" fetchPlan="_base"/>
            </fetchPlan>
            <loader/>
        </instance>
    </data>
  • 在视图中添加 dynamicAttributesPanel 可视化组件:

    <layout>
        <formLayout id="form" dataContainer="carDc">
            <textField id="numberField" property="number"/>
            <textField id="modelField" property="model"/>
            <dynattr:dynamicAttributesPanel dataContainer="carDc"
                                            categoryFieldVisible="true"/>
        </formLayout>
        <!--...-->
    </layout>

显式添加特定属性

最后,也可以手动在视图中添加动态属性。在 facets 中添加 dynamicAttributes facet,然后在 UI 组件绑定属性时,使用 + 前缀指定动态属性:

<facets>
    <dynattr:dynamicAttributes/>
    <dataLoadCoordinator auto="true"/>
</facets>
<data>
    <instance id="carDc"
              class="com.company.demo.entity.Car">
         <fetchPlan extends="_base">
        </fetchPlan>
        <loader/>
    </instance>
</data>
<layout>
    <formLayout id="form" dataContainer="carDc">
        <!--...-->
        <textField property="+passengerNumberOfSeats"/>
    </formLayout>
    <!--...-->
</layout>