跳转到内容

树容器自定义数据源

定义并实现自定义数据源

新建一个模型:

@Model
public class Category extends BaseModel<Long> {
@Field
private String name;
@Field
@LinkMeta
private Category parent;
}

该模型至少包含一个 Link 字段指向自己,用于描述上级节点。

基于该模型新建自定义数据源:

@TreeDataSource
public 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 可以使用,详见各种树组件的文档,这里不再赘述。