ODataListBinding.filter 方法里 FilterType.Application 和 FilterType.Control 的区别

简介: ODataListBinding.filter 方法里 FilterType.Application 和 FilterType.Control 的区别

在我的这篇教程 SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能 里,有朋友提出了一个疑问:

代码第 37 行里这个 FilterType.Application 的作用是什么?

57.png

这个 FilterType.Application 是枚举类型 FilterType 的一个字段,作为 filter 的输入参数之一。filter 方法定义在 ODataListBinding.prototype.filter 上。

ODataListBinding.js 文件里能找到这个方法的实现源代码。

58.png

里面的大段注释里,就提到了这个 FilterType 的含义:

59.png

也可以从官方文档里查看这个 FilterType 的定义:


每个列表绑定维护两个单独的过滤器列表,一个用于由拥有该绑定的控件内部定义的过滤器(维护在 ODataListBinding 实例的 aFilters 数组属性里),另一个用于应用程序可以另外定义的过滤器列表(维护在 ODataListBinding 属性的 aApplicationFilters 数组属性里)。 当执行过滤操作时,两组过滤器会被合并。

60.png

可以把 FilterType.Control 理解成由控件本身设置、维护并实现的过滤器,这些过滤逻辑对于外界消费的应用程序来说是一个黑盒子。某些控件将过滤器功能作为其行为的一部分,例如 Table ColumnsFacet filters 过滤器。当此类控件为某绑定路径定义过滤器时,它们应使用 FilterType.Control 将其过滤器与应用程序可能另外定义的过滤器分开。

61.png

查看 ODataListBinding 的实现源代码,如果过滤器类型为 FilterType.Control,就把 filter 方法传入的过滤器明细放置到 1768 行的 this.aFilters 数组属性里;


否则类型就是 FilterType.Application, 此时过滤器定义放置到 this.aApplicationFilters 里。

image.png

62.png

我们在 search 字段输入 Hu,对 People 模型的 LastName 字段进行过滤:

63.png

最后这两种类型的 filter,会在 ODataListBinding.prototype.filter 方法的调用栈内部,通过 combineFilters 做一个合并操作:

64.png



60.png

目录
相关文章
|
6月前
|
SQL 搜索推荐
@Metadata.allowExtensions 注解的一个实际使用例子
@Metadata.allowExtensions 注解的一个实际使用例子
31 0
|
5月前
|
应用服务中间件 数据安全/隐私保护 容器
websphere Error 404:SRVE0190E: File not found: index.action
websphere Error 404:SRVE0190E: File not found: index.action
|
5月前
SpringCloudGateway中出现No primary or default constructor和web-application-type=reactive or remove
SpringCloudGateway中出现No primary or default constructor和web-application-type=reactive or remove
129 0
|
7月前
ODataListBinding.filter 方法里 FilterType.Application 和 FilterType.Control 的区别
ODataListBinding.filter 方法里 FilterType.Application 和 FilterType.Control 的区别
37 0
|
6月前
|
缓存 NoSQL Java
【异常】com.alicp.jetcache.CacheException: refresh error
【异常】com.alicp.jetcache.CacheException: refresh error
51 1
|
6月前
|
开发者
什么是 CDS view 的注解 @Metadata.allowExtensionstrue
什么是 CDS view 的注解 @Metadata.allowExtensionstrue
29 0
org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'
org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'
|
10月前
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method add in the service
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method add in the service
125 0
|
Java Apache
Cause: the class org.apache.tools.ant.taskdefs.optional.ANTLR was not found.
Cause: the class org.apache.tools.ant.taskdefs.optional.ANTLR was not found.
84 0
Plugin with id 'com.android.application' not found
Plugin with id 'com.android.application' not found
95 0