展示动态属性
默认情况下,界面不显示动态属性。使用下面的任一方法可以在界面中展示动态属性。
使用 dynamicAttributes Facet
dynamicAttributes
facet 支持在 Table
或 Form
组件中展示动态属性,这两种组件需要绑定包含动态属性实体的数据容器。
在界面 XML 中的 facet
部分添加 dynamicAttributes
facet:
<window xmlns="http://jmix.io/schema/ui/window"
caption="msg://carEdit.caption"
focusComponent="form"
xmlns:dynattrui="http://jmix.io/schema/dynattr/ui">
<facets>
<dataLoadCoordinator auto="true"/>
<dynattrui:dynamicAttributes/>
</facets>
<!--...-->
</window>
然后,需要在 Category attribute editor(分类属性编辑) 界面的 可见性 标签页选择此界面。
使用 DynamicAttributesPanel
如果实体实现了 Categorized
接口,则可以使用 DynamicAttributesPanel
组件来显示该实体的动态属性。此组件支持为特定实体实例选择分类,并指定此分类的动态属性的值。
如需在编辑界面中使用 DynamicAttributesPanel
组件,请按照下列步骤:
-
在
data
部分,声明一个InstanceContainer
:<instance id="carDc" class="dynattr.ex1.entity.Car"> <fetchPlan extends="_base"> <property name="category" fetchPlan="_instance_name"/> (1) </fetchPlan> <loader dynamicAttributes="true"/> (2) </instance>
1 在包含分类的实体 fetch plan 中包含 category 属性。 2 设置加载器的 dynamicAttributes
属性为true
,以便加载实体的动态属性。动态属性默认不会加载。 -
在界面的 XML 描述中,包含
dynamicAttributesPanel
可视化组件:<dynamicAttributesPanel dataContainer="carDc" cols="2" rows="2" width="AUTO"/>
可以使用
cols
参数设置展示动态属性的列数。或者也可以使用rows
来指定行数(但是这种情况下,列数会自动计算)。默认情况下,所有属性会显示在一列内。在分类编辑器的 Attributes Location(属性位置) 标签页,可以更灵活的自定义动态属性的位置。此时,会忽略 cols
和rows
参数值。
显式添加特定属性
最后,你也可以手动在界面中添加动态属性。在数据加载器设置 dynamicAttributes="true"
属性,然后在 UI 组件绑定属性时,使用 +
前缀指定动态属性:
<data>
<instance id="carDc"
class="dynattr.ex1.entity.Car">
<fetchPlan extends="_local"/>
<loader dynamicAttributes="true"/>
</instance>
</data>
<layout>
<form id="form" dataContainer="carDc">
<!-- ... -->
<textField property="+PassengerNumberofseats"
caption="Number of seats"/>
</form>
</layout>