搜索字段:过滤嵌套对象
Posted
技术标签:
【中文标题】搜索字段:过滤嵌套对象【英文标题】:Search field: Filtering nested object 【发布时间】:2021-02-21 09:41:13 【问题描述】:大家好,
我有以下数据结构:
[
"supplierCode": "supplier1",
"supplierDesc": "supplier1Desc",
"pos": [
"poNum": "11111",
"materialNum": "matNum11",
"materialDesc": "matDesc11"
,
"poNum": "11112",
"materialNum": "matNum22",
"materialDesc": "matDesc22"
] ,
"supplierCode": "supplier2",
"supplierDesc": "supplier2Desc",
"pos": [
"poNum": "22222",
"materialNum": "matNum11",
"materialDesc": "matDesc11",
"poNum": "22223",
"materialNum": "matNum22",
"materialDesc": "matDesc22"]
]
我的任务是通过 pos
数组中的属性过滤 JSON 模型中的数据。
我尝试了以下方法:
myList = this.getView().byId("myList");
var binding = myList.getBinding("items");
if (!query)
binding.filter([]);
else
binding.filter([new sap.ui.model.Filter([
new sap.ui.model.Filter("supplierCode", sap.ui.model.FilterOperator.Contains, query),
new sap.ui.model.Filter("supplierDesc", sap.ui.model.FilterOperator.Contains, query),
new sap.ui.model.Filter("pos/materialDesc", sap.ui.model.FilterOperator.Contains, query)
], false)]);
没有运气。
另外,我发现可以使用 ODataModel,但我没有找到任何关于 JSONModel 的信息。
这样的过滤可以做吗?
谢谢。
【问题讨论】:
您可以构建自己的过滤功能。在Filter
对象的构造函数中查看属性test
:sapui5.hana.ondemand.com/#/api/…
【参考方案1】:
下面是 Filter 的构造函数下的测试函数示例: 过滤结果将返回一行列表,其中包含过滤器中引入的 materialDesc 描述:
onFilterInvoices: function(oEvent)
// build filter array
var aFilter = [];
var sQuery = oEvent.getParameter("query");
if (sQuery)
aFilter.push(new sap.ui.model.Filter(
path: "pos",
test: function(oValue)
var oMaterials = oValue;
for (var i in oMaterials)
if (oMaterials[i].materialDesc === sQuery)
return true;
return false;
));
// filter binding
var oList = this.getView().byId("listapp");
var oBinding = oList.getBinding("items");
oBinding.filter(aFilter);
【讨论】:
此方案适用于过滤外部阵列(供应商)。是否也可以过滤内部数组? (采购订单?) 它是根据我测试过的内部阵列 (Pos) 的 materialDesc 进行过滤的,它对我来说效果很好以上是关于搜索字段:过滤嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?
带有 C#Driver 的 MongoDB:如何过滤嵌套对象数组中的字段