展示动态属性
当项目中安装了动态属性扩展组件,则创建新的详情视图或列表视图时,可以使用 dynamicAttributes facet。
在视图展示动态属性的另一个方法就是使用 DynamicAttributesPanel。
使用 dynamicAttributes Facet
dynamicAttributes facet 支持在 DataGrid 或 FormLayout 组件中展示动态属性,这两种组件需要绑定包含动态属性实体的数据容器。
视图 XML 中使用
需要在视图中使用动态属性,可以在界面 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>
添加 facet 后,可以在 Visibility 标签页的 Category attribute details 对话框中选择此视图。
在 Fragment 中使用
dynamicAttributes facet 也可以用于 fragments。
将 facet 添加到 fragment 的 XML 中:
<fragment xmlns="http://jmix.io/schema/flowui/fragment"
xmlns:dynattr="http://jmix.io/schema/dynattr/flowui">
<data>
<collection id="usersDc"
class="com.company.demo.entity.User">
<fetchPlan extends="_base"/>
<loader id="usersDl" readOnly="true">
<query>
<![CDATA[select e from User e order by e.username]]>
</query>
</loader>
</collection>
</data>
<facets>
<dynattr:dynamicAttributes/>
<fragmentDataLoadCoordinator auto="true"/>
</facets>
<content>
<vbox id="root">
<dataGrid id="usersDataGrid"
width="100%"
columnReorderingAllowed="true"
minHeight="20em"
dataContainer="usersDc">
<columns resizable="true">
<column property="username"/>
<column property="firstName"/>
<column property="lastName"/>
<column property="email"/>
<column property="timeZoneId"/>
<column property="active"/>
</columns>
</dataGrid>
</vbox>
</content>
</fragment>
Fragment 控制器示例:
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import io.jmix.flowui.fragment.Fragment;
import io.jmix.flowui.fragment.FragmentDescriptor;
@FragmentDescriptor("dynamic-attributes-fragment.xml")
public class DynamicAttributesFragment extends Fragment<VerticalLayout> {
}
然后创建一个使用该 fragment 的视图。
|
使用 在配置动态属性的 可见性 时,使用 fragment 的视图的标识符遵循这个范式:
|
使用 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>