EditorScreenFacet

EditorScreenFacet 本质上是一个 ScreenFacet,但是添加了一组选项,用于打开实体编辑界面。

组件的 XML 名称:editorScreen

属性

除了支持 ScreenFacet属性 外,EditorScreenFacet 新增了下列自有属性:

  • addFirst - 定义一个新 item 添加的位置,是集合的开始还是结尾。只影响单独的容器,对内部嵌套容器来说,新 item 总是添加至尾部。

  • container - 设置 集合实例容器。当界面提交时会更新该容器。如果是内部嵌套容器,框架会自动初始化父实体的引用并设置编辑组件的数据上下文。

  • editMode - 设置界面的编辑模式,对应于 EditMode 枚举:

    • CREATE - 新建实体实例。

    • EDIT - 编辑已有实例。

  • entityClass - 实体类的全限定名。

  • field - 设置 EntityPicker 组件的 id。如果设置了该字段,框架会在编辑器成功提交后,将提交的实体设置到这个 Field 上。

  • listComponent - 设置列表组件 id。如果没设置数据容器,则通过列表组件获取。通常,列表组件是 TableDataGrid

示例:

<window xmlns="http://jmix.io/schema/ui/window"
        caption="msg://editorScreenFacetScreen.caption">
    <data readOnly="true">
        <collection id="departmentsDc"
                    class="ui.ex1.entity.Department">
            <fetchPlan extends="_base">
                <property name="employee" fetchPlan="_base"/>
            </fetchPlan>
            <loader id="departmentsDl">
                <query>
                    <![CDATA[select e from uiex1_Department e]]>
                </query>
            </loader>
        </collection>
    </data>
    <facets>
        <editorScreen id="editorScreen"
                      editMode="CREATE"
                      entityClass="ui.ex1.entity.Customer"
                      onButton="openEditBtn"
                      addFirst="true">
        </editorScreen>
        <dataLoadCoordinator auto="true"/>
        <screenSettings id="settingsFacet" auto="true"/>
    </facets>
    <layout>
        <button id="openEditBtn"
                caption="Open an editor screen"
                width="100%"/>
    </layout>
</window>

事件和处理器

如需使用 Jmix Studio 生成处理器的桩代码,需要在界面 XML 描述或者 Component Hierarchy 面板选中 facet 元素,然后用 Component Inspector 面板的 Handlers 标签页生成。

或者可以使用界面控制器顶部面板的 Generate Handler 按钮。

AfterCloseEvent

AfterCloseEvent 在 facet 配置的界面之后关闭发送。参阅 AfterCloseEvent 了解细节。

AfterShowEvent

AfterShowEvent 在 facet 配置的界面展示之后发送。参阅 AfterShowEvent 了解细节。

EntityProvider

EntityProvider 代理方法支持为打开的界面传递一个实体实例:

@Autowired
private DataManager dataManager;

@Install(to = "editorScreen", subject = "entityProvider")
private User editorScreenEntityProvider() {
    User user = dataManager.create(User.class);
    user.setFirstName("John");
    user.setLastName("Doe");

    return user;
}

编程式用法,调用 setEntityProvider() 方法。

Initializer

是一个处理器,可以接收新实体实例,并在其展示到编辑界面之前初始化该实体。参阅 Initializer 了解细节。

编程式用法,调用 setInitializer() 方法。

OptionsProvider

参阅 OptionsProvider

ParentDataContextProvider

ParentDataContextProvider 代理方法支持为打开的界面传递一个 父数据上下文

@Autowired
private DataContext dataContext;

@Install(to = "editorScreen", subject = "parentDataContextProvider")
private DataContext editorScreenParentDataContextProvider() {
    return dataContext;
}

编程式用法,调用 setParentDataContextProvider() 方法。

ScreenConfigurer

参阅 ScreenConfigurer

Transformation

在编辑界面中选择并验证实体后调用。请参阅 Transformation 了解详情。

XML 属性

可以在 Studio 界面设计器中的 Component Inspector 面板查看和编辑 facet 支持的属性。