树容器自定义数据源
定义并实现自定义数据源
新建一个模型:
@Modelpublic class Category extends BaseModel<Long> { @Field private String name; @Field @LinkMeta private Category parent;}该模型至少包含一个 Link 字段指向自己,用于描述上级节点。
基于该模型新建自定义数据源:
@TreeDataSourcepublic class CategoryTreeDataProvider extends TreeDataProvider<Category, QCategory, Long> { @Override public List<Category> loadChildren(@Nullable Long parentId, TreeSearchParams<Category, QCategory> params) { return null; }
@Override public List<TreeItem<Long>> search(TreeSearchParams<Category, QCategory> params) { return null; }
@Override public List<Category> reverseBuild(@Nullable Long parentId, TreeSearchParams<Category, QCategory> params) { return null; }
@Override public List<Category> loadByIds(List<Long> longs, TreeSearchParams<Category, QCategory> params) { return null; }}TreeDataProvider 拥有三个泛型,模型本身,模型对应的查询模型和该模型的 id 类型。
该自定义数据源的 key 为 ${业务域}_CategoryTreeDataProvider,比如在 item 业务域下,则为 item_CategoryTreeDataProvider。
按照概念描述实现四个方法以后,就可以在视图中使用。
使用
下面是一个数据容器片段:
<Tree model="item_Category" parentField="parent"> <Fields> <Field name="name"/> </Fields></Tree>如果针对这种数据容器,使用刚才定义的自定义数据源,可以做如下修改:
<Tree model="item_Category" parentField="parent" dataSource="item_CategoryTreeDataProvider"> <Fields> <Field name="name"/> </Fields></Tree>其他容器、控件也有 dataSource 或类似的 api 可以使用,详见各种树组件的文档,这里不再赘述。