Facets
Facets 是非可视化组件,用于为视图或组件添加辅助功能。
内置 Facets
框架提供下列 facets:
在 Jmix Studio 中添加 facet:
点击操作面板中的 Add Component,选择 Facets,然后双击需要添加的 facet 项。
Studio 会创建 <facets> 元素:
<facets>
<settings auto="true"/>
</facets>
|
在 Jmix Studio 可以使用 Jmix UI 组件属性面板查看和编辑 facet 属性。 |
自定义 Facets
应用程序或者扩展组件可以提供自定义的 facets。按照下列步骤创建自定义 facet:
-
创建一个接口,继承
io.jmix.flowui.facet.Facet。 -
根据
io.jmix.flowui.facet.impl.AbstractFacet创建一个实现类。 -
使用新的
FacetRegistrationBuilder注册 facet(参考下面的示例) -
创建一个可用于视图 XML 中的 XSD 结构文件。
-
可选,创建一个带注解标记的接口,这样可以支持在 Studio 的视图设计器中的 Jmix UI 面板展示该 facet。
具体实现请参考框架的 DataLoadCoordinator 和 UrlQueryParametersFacet 类。
注册自定义 Facet
Facet 注册机制包含三个主要组件:
-
实现 —— 实现 facet 逻辑的类。
-
加载器 —— 从 XML 读取 facet 配置并创建 facet 实例的类。
-
标签 —— 用于在视图中声明 facet 的 XML 元素名称。
可以使用 FacetRegistrationBuilder 注册新的 facet 组合。
注册自定义定时器 facet 的示例:
import io.jmix.flowui.facet.Timer;
import io.jmix.flowui.sys.registration.FacetRegistration;
import io.jmix.flowui.sys.registration.FacetRegistrationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FacetConfiguration {
@Bean
public FacetRegistration extTimerFacet() {
return FacetRegistrationBuilder.create(TimerExtImpl.class) (1)
.replaceFacet(Timer.class) (2)
.withFacetLoader("timer", TimerFacetExtLoader.class) (3)
.build();
}
}
| 1 | 指定实现 facet 的类。 |
| 2 | 如果你的 facet 应该替换现有的框架 facet(例如标准的 Timer),则调用该方法。这会把视图中原始 facet 的所有使用替换成自定义实现。 |
| 3 | 将 XML 标签(例如 "timer")与加载器类关联。加载器必须扩展 io.jmix.flowui.xml.facet.loader.FacetLoader,并且知道如何从 XML 创建 facet。 |
如果你的 facet 没有替换现有的 facet,可以省略 replaceFacet(),只需提供一个加载器即可:
@Bean
public FacetRegistration customTimerFacet() {
return FacetRegistrationBuilder.create(TimerExtImpl.class)
.withFacetLoader("customTimer", TimerFacetExtLoader.class)
.build();
}
本页是否有帮助?
感谢您的反馈